1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Copyright (c) 2018, The Linux Foundation. All rights reserved. 4 */ 5 6 #include <linux/kernel.h> 7 #include <linux/err.h> 8 #include <linux/platform_device.h> 9 #include <linux/module.h> 10 #include <linux/of.h> 11 #include <linux/of_device.h> 12 #include <linux/clk-provider.h> 13 #include <linux/regmap.h> 14 15 #include <linux/reset-controller.h> 16 #include <dt-bindings/clock/qcom,gcc-ipq6018.h> 17 #include <dt-bindings/reset/qcom,gcc-ipq6018.h> 18 19 #include "common.h" 20 #include "clk-regmap.h" 21 #include "clk-pll.h" 22 #include "clk-rcg.h" 23 #include "clk-branch.h" 24 #include "clk-alpha-pll.h" 25 #include "clk-regmap-divider.h" 26 #include "clk-regmap-mux.h" 27 #include "reset.h" 28 29 #define F(f, s, h, m, n) { (f), (s), (2 * (h) - 1), (m), (n) } 30 31 enum { 32 P_XO, 33 P_BIAS_PLL, 34 P_UNIPHY0_RX, 35 P_UNIPHY0_TX, 36 P_UNIPHY1_RX, 37 P_BIAS_PLL_NSS_NOC, 38 P_UNIPHY1_TX, 39 P_PCIE20_PHY0_PIPE, 40 P_USB3PHY_0_PIPE, 41 P_GPLL0, 42 P_GPLL0_DIV2, 43 P_GPLL2, 44 P_GPLL4, 45 P_GPLL6, 46 P_SLEEP_CLK, 47 P_UBI32_PLL, 48 P_NSS_CRYPTO_PLL, 49 P_PI_SLEEP, 50 }; 51 52 static struct clk_alpha_pll gpll0_main = { 53 .offset = 0x21000, 54 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 55 .clkr = { 56 .enable_reg = 0x0b000, 57 .enable_mask = BIT(0), 58 .hw.init = &(struct clk_init_data){ 59 .name = "gpll0_main", 60 .parent_data = &(const struct clk_parent_data){ 61 .fw_name = "xo", 62 }, 63 .num_parents = 1, 64 .ops = &clk_alpha_pll_ops, 65 }, 66 }, 67 }; 68 69 static struct clk_fixed_factor gpll0_out_main_div2 = { 70 .mult = 1, 71 .div = 2, 72 .hw.init = &(struct clk_init_data){ 73 .name = "gpll0_out_main_div2", 74 .parent_hws = (const struct clk_hw *[]){ 75 &gpll0_main.clkr.hw }, 76 .num_parents = 1, 77 .ops = &clk_fixed_factor_ops, 78 .flags = CLK_SET_RATE_PARENT, 79 }, 80 }; 81 82 static struct clk_alpha_pll_postdiv gpll0 = { 83 .offset = 0x21000, 84 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 85 .width = 4, 86 .clkr.hw.init = &(struct clk_init_data){ 87 .name = "gpll0", 88 .parent_hws = (const struct clk_hw *[]){ 89 &gpll0_main.clkr.hw }, 90 .num_parents = 1, 91 .ops = &clk_alpha_pll_postdiv_ro_ops, 92 .flags = CLK_SET_RATE_PARENT, 93 }, 94 }; 95 96 static const struct clk_parent_data gcc_xo_gpll0_gpll0_out_main_div2[] = { 97 { .fw_name = "xo" }, 98 { .hw = &gpll0.clkr.hw}, 99 { .hw = &gpll0_out_main_div2.hw}, 100 }; 101 102 static const struct parent_map gcc_xo_gpll0_gpll0_out_main_div2_map[] = { 103 { P_XO, 0 }, 104 { P_GPLL0, 1 }, 105 { P_GPLL0_DIV2, 4 }, 106 }; 107 108 static struct clk_alpha_pll ubi32_pll_main = { 109 .offset = 0x25000, 110 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_HUAYRA], 111 .flags = SUPPORTS_DYNAMIC_UPDATE, 112 .clkr = { 113 .enable_reg = 0x0b000, 114 .enable_mask = BIT(6), 115 .hw.init = &(struct clk_init_data){ 116 .name = "ubi32_pll_main", 117 .parent_data = &(const struct clk_parent_data){ 118 .fw_name = "xo", 119 }, 120 .num_parents = 1, 121 .ops = &clk_alpha_pll_huayra_ops, 122 }, 123 }, 124 }; 125 126 static struct clk_alpha_pll_postdiv ubi32_pll = { 127 .offset = 0x25000, 128 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_HUAYRA], 129 .width = 2, 130 .clkr.hw.init = &(struct clk_init_data){ 131 .name = "ubi32_pll", 132 .parent_hws = (const struct clk_hw *[]){ 133 &ubi32_pll_main.clkr.hw }, 134 .num_parents = 1, 135 .ops = &clk_alpha_pll_postdiv_ro_ops, 136 .flags = CLK_SET_RATE_PARENT, 137 }, 138 }; 139 140 static struct clk_alpha_pll gpll6_main = { 141 .offset = 0x37000, 142 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO], 143 .clkr = { 144 .enable_reg = 0x0b000, 145 .enable_mask = BIT(7), 146 .hw.init = &(struct clk_init_data){ 147 .name = "gpll6_main", 148 .parent_data = &(const struct clk_parent_data){ 149 .fw_name = "xo", 150 }, 151 .num_parents = 1, 152 .ops = &clk_alpha_pll_ops, 153 }, 154 }, 155 }; 156 157 static struct clk_alpha_pll_postdiv gpll6 = { 158 .offset = 0x37000, 159 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO], 160 .width = 2, 161 .clkr.hw.init = &(struct clk_init_data){ 162 .name = "gpll6", 163 .parent_hws = (const struct clk_hw *[]){ 164 &gpll6_main.clkr.hw }, 165 .num_parents = 1, 166 .ops = &clk_alpha_pll_postdiv_ro_ops, 167 .flags = CLK_SET_RATE_PARENT, 168 }, 169 }; 170 171 static struct clk_alpha_pll gpll4_main = { 172 .offset = 0x24000, 173 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 174 .clkr = { 175 .enable_reg = 0x0b000, 176 .enable_mask = BIT(5), 177 .hw.init = &(struct clk_init_data){ 178 .name = "gpll4_main", 179 .parent_data = &(const struct clk_parent_data){ 180 .fw_name = "xo", 181 }, 182 .num_parents = 1, 183 .ops = &clk_alpha_pll_ops, 184 }, 185 }, 186 }; 187 188 static struct clk_alpha_pll_postdiv gpll4 = { 189 .offset = 0x24000, 190 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 191 .width = 4, 192 .clkr.hw.init = &(struct clk_init_data){ 193 .name = "gpll4", 194 .parent_hws = (const struct clk_hw *[]){ 195 &gpll4_main.clkr.hw }, 196 .num_parents = 1, 197 .ops = &clk_alpha_pll_postdiv_ro_ops, 198 .flags = CLK_SET_RATE_PARENT, 199 }, 200 }; 201 202 static const struct freq_tbl ftbl_pcnoc_bfdcd_clk_src[] = { 203 F(24000000, P_XO, 1, 0, 0), 204 F(50000000, P_GPLL0, 16, 0, 0), 205 F(100000000, P_GPLL0, 8, 0, 0), 206 { } 207 }; 208 209 static struct clk_rcg2 pcnoc_bfdcd_clk_src = { 210 .cmd_rcgr = 0x27000, 211 .freq_tbl = ftbl_pcnoc_bfdcd_clk_src, 212 .hid_width = 5, 213 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map, 214 .clkr.hw.init = &(struct clk_init_data){ 215 .name = "pcnoc_bfdcd_clk_src", 216 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2, 217 .num_parents = 3, 218 .ops = &clk_rcg2_ops, 219 }, 220 }; 221 222 static struct clk_alpha_pll gpll2_main = { 223 .offset = 0x4a000, 224 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 225 .clkr = { 226 .enable_reg = 0x0b000, 227 .enable_mask = BIT(2), 228 .hw.init = &(struct clk_init_data){ 229 .name = "gpll2_main", 230 .parent_data = &(const struct clk_parent_data){ 231 .fw_name = "xo", 232 }, 233 .num_parents = 1, 234 .ops = &clk_alpha_pll_ops, 235 }, 236 }, 237 }; 238 239 static struct clk_alpha_pll_postdiv gpll2 = { 240 .offset = 0x4a000, 241 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 242 .width = 4, 243 .clkr.hw.init = &(struct clk_init_data){ 244 .name = "gpll2", 245 .parent_hws = (const struct clk_hw *[]){ 246 &gpll2_main.clkr.hw }, 247 .num_parents = 1, 248 .ops = &clk_alpha_pll_postdiv_ro_ops, 249 .flags = CLK_SET_RATE_PARENT, 250 }, 251 }; 252 253 static struct clk_alpha_pll nss_crypto_pll_main = { 254 .offset = 0x22000, 255 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 256 .clkr = { 257 .enable_reg = 0x0b000, 258 .enable_mask = BIT(4), 259 .hw.init = &(struct clk_init_data){ 260 .name = "nss_crypto_pll_main", 261 .parent_data = &(const struct clk_parent_data){ 262 .fw_name = "xo", 263 }, 264 .num_parents = 1, 265 .ops = &clk_alpha_pll_ops, 266 }, 267 }, 268 }; 269 270 static struct clk_alpha_pll_postdiv nss_crypto_pll = { 271 .offset = 0x22000, 272 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 273 .width = 4, 274 .clkr.hw.init = &(struct clk_init_data){ 275 .name = "nss_crypto_pll", 276 .parent_hws = (const struct clk_hw *[]){ 277 &nss_crypto_pll_main.clkr.hw }, 278 .num_parents = 1, 279 .ops = &clk_alpha_pll_postdiv_ro_ops, 280 .flags = CLK_SET_RATE_PARENT, 281 }, 282 }; 283 284 static const struct freq_tbl ftbl_qdss_tsctr_clk_src[] = { 285 F(160000000, P_GPLL0_DIV2, 2.5, 0, 0), 286 F(320000000, P_GPLL0, 2.5, 0, 0), 287 F(600000000, P_GPLL4, 2, 0, 0), 288 { } 289 }; 290 291 static const struct clk_parent_data gcc_xo_gpll4_gpll0_gpll6_gpll0_div2[] = { 292 { .fw_name = "xo" }, 293 { .hw = &gpll4.clkr.hw }, 294 { .hw = &gpll0.clkr.hw }, 295 { .hw = &gpll6.clkr.hw }, 296 { .hw = &gpll0_out_main_div2.hw }, 297 }; 298 299 static const struct parent_map gcc_xo_gpll4_gpll0_gpll6_gpll0_div2_map[] = { 300 { P_XO, 0 }, 301 { P_GPLL4, 1 }, 302 { P_GPLL0, 2 }, 303 { P_GPLL6, 3 }, 304 { P_GPLL0_DIV2, 4 }, 305 }; 306 307 static struct clk_rcg2 qdss_tsctr_clk_src = { 308 .cmd_rcgr = 0x29064, 309 .freq_tbl = ftbl_qdss_tsctr_clk_src, 310 .hid_width = 5, 311 .parent_map = gcc_xo_gpll4_gpll0_gpll6_gpll0_div2_map, 312 .clkr.hw.init = &(struct clk_init_data){ 313 .name = "qdss_tsctr_clk_src", 314 .parent_data = gcc_xo_gpll4_gpll0_gpll6_gpll0_div2, 315 .num_parents = 5, 316 .ops = &clk_rcg2_ops, 317 }, 318 }; 319 320 static struct clk_fixed_factor qdss_dap_sync_clk_src = { 321 .mult = 1, 322 .div = 4, 323 .hw.init = &(struct clk_init_data){ 324 .name = "qdss_dap_sync_clk_src", 325 .parent_hws = (const struct clk_hw *[]){ 326 &qdss_tsctr_clk_src.clkr.hw }, 327 .num_parents = 1, 328 .ops = &clk_fixed_factor_ops, 329 }, 330 }; 331 332 static const struct freq_tbl ftbl_qdss_at_clk_src[] = { 333 F(66670000, P_GPLL0_DIV2, 6, 0, 0), 334 F(240000000, P_GPLL4, 5, 0, 0), 335 { } 336 }; 337 338 static struct clk_rcg2 qdss_at_clk_src = { 339 .cmd_rcgr = 0x2900c, 340 .freq_tbl = ftbl_qdss_at_clk_src, 341 .hid_width = 5, 342 .parent_map = gcc_xo_gpll4_gpll0_gpll6_gpll0_div2_map, 343 .clkr.hw.init = &(struct clk_init_data){ 344 .name = "qdss_at_clk_src", 345 .parent_data = gcc_xo_gpll4_gpll0_gpll6_gpll0_div2, 346 .num_parents = 5, 347 .ops = &clk_rcg2_ops, 348 }, 349 }; 350 351 static struct clk_fixed_factor qdss_tsctr_div2_clk_src = { 352 .mult = 1, 353 .div = 2, 354 .hw.init = &(struct clk_init_data){ 355 .name = "qdss_tsctr_div2_clk_src", 356 .parent_hws = (const struct clk_hw *[]){ 357 &qdss_tsctr_clk_src.clkr.hw }, 358 .num_parents = 1, 359 .flags = CLK_SET_RATE_PARENT, 360 .ops = &clk_fixed_factor_ops, 361 }, 362 }; 363 364 static const struct freq_tbl ftbl_nss_ppe_clk_src[] = { 365 F(24000000, P_XO, 1, 0, 0), 366 F(300000000, P_BIAS_PLL, 1, 0, 0), 367 { } 368 }; 369 370 static const struct clk_parent_data gcc_xo_bias_gpll0_gpll4_nss_ubi32[] = { 371 { .fw_name = "xo" }, 372 { .fw_name = "bias_pll_cc_clk" }, 373 { .hw = &gpll0.clkr.hw }, 374 { .hw = &gpll4.clkr.hw }, 375 { .hw = &nss_crypto_pll.clkr.hw }, 376 { .hw = &ubi32_pll.clkr.hw }, 377 }; 378 379 static const struct parent_map gcc_xo_bias_gpll0_gpll4_nss_ubi32_map[] = { 380 { P_XO, 0 }, 381 { P_BIAS_PLL, 1 }, 382 { P_GPLL0, 2 }, 383 { P_GPLL4, 3 }, 384 { P_NSS_CRYPTO_PLL, 4 }, 385 { P_UBI32_PLL, 5 }, 386 }; 387 388 static struct clk_rcg2 nss_ppe_clk_src = { 389 .cmd_rcgr = 0x68080, 390 .freq_tbl = ftbl_nss_ppe_clk_src, 391 .hid_width = 5, 392 .parent_map = gcc_xo_bias_gpll0_gpll4_nss_ubi32_map, 393 .clkr.hw.init = &(struct clk_init_data){ 394 .name = "nss_ppe_clk_src", 395 .parent_data = gcc_xo_bias_gpll0_gpll4_nss_ubi32, 396 .num_parents = 6, 397 .ops = &clk_rcg2_ops, 398 }, 399 }; 400 401 static struct clk_branch gcc_xo_clk_src = { 402 .halt_reg = 0x30018, 403 .clkr = { 404 .enable_reg = 0x30018, 405 .enable_mask = BIT(1), 406 .hw.init = &(struct clk_init_data){ 407 .name = "gcc_xo_clk_src", 408 .parent_data = &(const struct clk_parent_data){ 409 .fw_name = "xo", 410 }, 411 .num_parents = 1, 412 .flags = CLK_SET_RATE_PARENT, 413 .ops = &clk_branch2_ops, 414 }, 415 }, 416 }; 417 418 static const struct freq_tbl ftbl_nss_ce_clk_src[] = { 419 F(24000000, P_XO, 1, 0, 0), 420 F(200000000, P_GPLL0, 4, 0, 0), 421 { } 422 }; 423 424 static const struct clk_parent_data gcc_xo_gpll0[] = { 425 { .fw_name = "xo" }, 426 { .hw = &gpll0.clkr.hw }, 427 }; 428 429 static const struct parent_map gcc_xo_gpll0_map[] = { 430 { P_XO, 0 }, 431 { P_GPLL0, 1 }, 432 }; 433 434 static struct clk_rcg2 nss_ce_clk_src = { 435 .cmd_rcgr = 0x68098, 436 .freq_tbl = ftbl_nss_ce_clk_src, 437 .hid_width = 5, 438 .parent_map = gcc_xo_gpll0_map, 439 .clkr.hw.init = &(struct clk_init_data){ 440 .name = "nss_ce_clk_src", 441 .parent_data = gcc_xo_gpll0, 442 .num_parents = 2, 443 .ops = &clk_rcg2_ops, 444 }, 445 }; 446 447 static struct clk_branch gcc_sleep_clk_src = { 448 .halt_reg = 0x30000, 449 .clkr = { 450 .enable_reg = 0x30000, 451 .enable_mask = BIT(1), 452 .hw.init = &(struct clk_init_data){ 453 .name = "gcc_sleep_clk_src", 454 .parent_data = &(const struct clk_parent_data){ 455 .fw_name = "sleep_clk", 456 }, 457 .num_parents = 1, 458 .ops = &clk_branch2_ops, 459 }, 460 }, 461 }; 462 463 static const struct freq_tbl ftbl_snoc_nssnoc_bfdcd_clk_src[] = { 464 F(24000000, P_XO, 1, 0, 0), 465 F(50000000, P_GPLL0_DIV2, 8, 0, 0), 466 F(100000000, P_GPLL0, 8, 0, 0), 467 F(133333333, P_GPLL0, 6, 0, 0), 468 F(160000000, P_GPLL0, 5, 0, 0), 469 F(200000000, P_GPLL0, 4, 0, 0), 470 F(266666667, P_GPLL0, 3, 0, 0), 471 { } 472 }; 473 474 static const struct clk_parent_data 475 gcc_xo_gpll0_gpll6_gpll0_out_main_div2[] = { 476 { .fw_name = "xo" }, 477 { .hw = &gpll0.clkr.hw }, 478 { .hw = &gpll6.clkr.hw }, 479 { .hw = &gpll0_out_main_div2.hw }, 480 }; 481 482 static const struct parent_map gcc_xo_gpll0_gpll6_gpll0_out_main_div2_map[] = { 483 { P_XO, 0 }, 484 { P_GPLL0, 1 }, 485 { P_GPLL6, 2 }, 486 { P_GPLL0_DIV2, 3 }, 487 }; 488 489 static struct clk_rcg2 snoc_nssnoc_bfdcd_clk_src = { 490 .cmd_rcgr = 0x76054, 491 .freq_tbl = ftbl_snoc_nssnoc_bfdcd_clk_src, 492 .hid_width = 5, 493 .parent_map = gcc_xo_gpll0_gpll6_gpll0_out_main_div2_map, 494 .clkr.hw.init = &(struct clk_init_data){ 495 .name = "snoc_nssnoc_bfdcd_clk_src", 496 .parent_data = gcc_xo_gpll0_gpll6_gpll0_out_main_div2, 497 .num_parents = 4, 498 .ops = &clk_rcg2_ops, 499 }, 500 }; 501 502 static const struct freq_tbl ftbl_apss_ahb_clk_src[] = { 503 F(24000000, P_XO, 1, 0, 0), 504 F(25000000, P_GPLL0_DIV2, 16, 0, 0), 505 F(50000000, P_GPLL0, 16, 0, 0), 506 F(100000000, P_GPLL0, 8, 0, 0), 507 { } 508 }; 509 510 static struct clk_rcg2 apss_ahb_clk_src = { 511 .cmd_rcgr = 0x46000, 512 .freq_tbl = ftbl_apss_ahb_clk_src, 513 .hid_width = 5, 514 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map, 515 .clkr.hw.init = &(struct clk_init_data){ 516 .name = "apss_ahb_clk_src", 517 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2, 518 .num_parents = 3, 519 .ops = &clk_rcg2_ops, 520 }, 521 }; 522 523 static const struct freq_tbl ftbl_nss_port5_rx_clk_src[] = { 524 F(24000000, P_XO, 1, 0, 0), 525 F(25000000, P_UNIPHY1_RX, 12.5, 0, 0), 526 F(25000000, P_UNIPHY0_RX, 5, 0, 0), 527 F(78125000, P_UNIPHY1_RX, 4, 0, 0), 528 F(125000000, P_UNIPHY1_RX, 2.5, 0, 0), 529 F(125000000, P_UNIPHY0_RX, 1, 0, 0), 530 F(156250000, P_UNIPHY1_RX, 2, 0, 0), 531 F(312500000, P_UNIPHY1_RX, 1, 0, 0), 532 { } 533 }; 534 535 static const struct clk_parent_data 536 gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias[] = { 537 { .fw_name = "xo" }, 538 { .fw_name = "uniphy0_gcc_rx_clk" }, 539 { .fw_name = "uniphy0_gcc_tx_clk" }, 540 { .fw_name = "uniphy1_gcc_rx_clk" }, 541 { .fw_name = "uniphy1_gcc_tx_clk" }, 542 { .hw = &ubi32_pll.clkr.hw }, 543 { .fw_name = "bias_pll_cc_clk" }, 544 }; 545 546 static const struct parent_map 547 gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias_map[] = { 548 { P_XO, 0 }, 549 { P_UNIPHY0_RX, 1 }, 550 { P_UNIPHY0_TX, 2 }, 551 { P_UNIPHY1_RX, 3 }, 552 { P_UNIPHY1_TX, 4 }, 553 { P_UBI32_PLL, 5 }, 554 { P_BIAS_PLL, 6 }, 555 }; 556 557 static struct clk_rcg2 nss_port5_rx_clk_src = { 558 .cmd_rcgr = 0x68060, 559 .freq_tbl = ftbl_nss_port5_rx_clk_src, 560 .hid_width = 5, 561 .parent_map = gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias_map, 562 .clkr.hw.init = &(struct clk_init_data){ 563 .name = "nss_port5_rx_clk_src", 564 .parent_data = gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias, 565 .num_parents = 7, 566 .ops = &clk_rcg2_ops, 567 }, 568 }; 569 570 static const struct freq_tbl ftbl_nss_port5_tx_clk_src[] = { 571 F(24000000, P_XO, 1, 0, 0), 572 F(25000000, P_UNIPHY1_TX, 12.5, 0, 0), 573 F(25000000, P_UNIPHY0_TX, 5, 0, 0), 574 F(78125000, P_UNIPHY1_TX, 4, 0, 0), 575 F(125000000, P_UNIPHY1_TX, 2.5, 0, 0), 576 F(125000000, P_UNIPHY0_TX, 1, 0, 0), 577 F(156250000, P_UNIPHY1_TX, 2, 0, 0), 578 F(312500000, P_UNIPHY1_TX, 1, 0, 0), 579 { } 580 }; 581 582 static const struct clk_parent_data 583 gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias[] = { 584 { .fw_name = "xo" }, 585 { .fw_name = "uniphy0_gcc_tx_clk" }, 586 { .fw_name = "uniphy0_gcc_rx_clk" }, 587 { .fw_name = "uniphy1_gcc_tx_clk" }, 588 { .fw_name = "uniphy1_gcc_rx_clk" }, 589 { .hw = &ubi32_pll.clkr.hw }, 590 { .fw_name = "bias_pll_cc_clk" }, 591 }; 592 593 static const struct parent_map 594 gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias_map[] = { 595 { P_XO, 0 }, 596 { P_UNIPHY0_TX, 1 }, 597 { P_UNIPHY0_RX, 2 }, 598 { P_UNIPHY1_TX, 3 }, 599 { P_UNIPHY1_RX, 4 }, 600 { P_UBI32_PLL, 5 }, 601 { P_BIAS_PLL, 6 }, 602 }; 603 604 static struct clk_rcg2 nss_port5_tx_clk_src = { 605 .cmd_rcgr = 0x68068, 606 .freq_tbl = ftbl_nss_port5_tx_clk_src, 607 .hid_width = 5, 608 .parent_map = gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias_map, 609 .clkr.hw.init = &(struct clk_init_data){ 610 .name = "nss_port5_tx_clk_src", 611 .parent_data = gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias, 612 .num_parents = 7, 613 .ops = &clk_rcg2_ops, 614 }, 615 }; 616 617 static const struct freq_tbl ftbl_pcie_axi_clk_src[] = { 618 F(24000000, P_XO, 1, 0, 0), 619 F(200000000, P_GPLL0, 4, 0, 0), 620 F(240000000, P_GPLL4, 5, 0, 0), 621 { } 622 }; 623 624 static const struct freq_tbl ftbl_pcie_rchng_clk_src[] = { 625 F(24000000, P_XO, 1, 0, 0), 626 F(100000000, P_GPLL0, 8, 0, 0), 627 { } 628 }; 629 630 static const struct clk_parent_data gcc_xo_gpll0_gpll4[] = { 631 { .fw_name = "xo" }, 632 { .hw = &gpll0.clkr.hw }, 633 { .hw = &gpll4.clkr.hw }, 634 }; 635 636 static const struct parent_map gcc_xo_gpll0_gpll4_map[] = { 637 { P_XO, 0 }, 638 { P_GPLL0, 1 }, 639 { P_GPLL4, 2 }, 640 }; 641 642 static struct clk_rcg2 pcie0_axi_clk_src = { 643 .cmd_rcgr = 0x75054, 644 .freq_tbl = ftbl_pcie_axi_clk_src, 645 .hid_width = 5, 646 .parent_map = gcc_xo_gpll0_gpll4_map, 647 .clkr.hw.init = &(struct clk_init_data){ 648 .name = "pcie0_axi_clk_src", 649 .parent_data = gcc_xo_gpll0_gpll4, 650 .num_parents = 3, 651 .ops = &clk_rcg2_ops, 652 }, 653 }; 654 655 static const struct freq_tbl ftbl_usb0_master_clk_src[] = { 656 F(80000000, P_GPLL0_DIV2, 5, 0, 0), 657 F(100000000, P_GPLL0, 8, 0, 0), 658 F(133330000, P_GPLL0, 6, 0, 0), 659 F(200000000, P_GPLL0, 4, 0, 0), 660 { } 661 }; 662 663 static const struct clk_parent_data gcc_xo_gpll0_out_main_div2_gpll0[] = { 664 { .fw_name = "xo" }, 665 { .hw = &gpll0_out_main_div2.hw }, 666 { .hw = &gpll0.clkr.hw }, 667 }; 668 669 static const struct parent_map gcc_xo_gpll0_out_main_div2_gpll0_map[] = { 670 { P_XO, 0 }, 671 { P_GPLL0_DIV2, 2 }, 672 { P_GPLL0, 1 }, 673 }; 674 675 static struct clk_rcg2 usb0_master_clk_src = { 676 .cmd_rcgr = 0x3e00c, 677 .freq_tbl = ftbl_usb0_master_clk_src, 678 .mnd_width = 8, 679 .hid_width = 5, 680 .parent_map = gcc_xo_gpll0_out_main_div2_gpll0_map, 681 .clkr.hw.init = &(struct clk_init_data){ 682 .name = "usb0_master_clk_src", 683 .parent_data = gcc_xo_gpll0_out_main_div2_gpll0, 684 .num_parents = 3, 685 .ops = &clk_rcg2_ops, 686 }, 687 }; 688 689 static struct clk_regmap_div apss_ahb_postdiv_clk_src = { 690 .reg = 0x46018, 691 .shift = 4, 692 .width = 4, 693 .clkr = { 694 .hw.init = &(struct clk_init_data){ 695 .name = "apss_ahb_postdiv_clk_src", 696 .parent_hws = (const struct clk_hw *[]){ 697 &apss_ahb_clk_src.clkr.hw }, 698 .num_parents = 1, 699 .ops = &clk_regmap_div_ops, 700 }, 701 }, 702 }; 703 704 static struct clk_fixed_factor gcc_xo_div4_clk_src = { 705 .mult = 1, 706 .div = 4, 707 .hw.init = &(struct clk_init_data){ 708 .name = "gcc_xo_div4_clk_src", 709 .parent_hws = (const struct clk_hw *[]){ 710 &gcc_xo_clk_src.clkr.hw }, 711 .num_parents = 1, 712 .ops = &clk_fixed_factor_ops, 713 .flags = CLK_SET_RATE_PARENT, 714 }, 715 }; 716 717 static const struct freq_tbl ftbl_nss_port1_rx_clk_src[] = { 718 F(24000000, P_XO, 1, 0, 0), 719 F(25000000, P_UNIPHY0_RX, 5, 0, 0), 720 F(125000000, P_UNIPHY0_RX, 1, 0, 0), 721 { } 722 }; 723 724 static const struct clk_parent_data gcc_xo_uniphy0_rx_tx_ubi32_bias[] = { 725 { .fw_name = "xo" }, 726 { .fw_name = "uniphy0_gcc_rx_clk" }, 727 { .fw_name = "uniphy0_gcc_tx_clk" }, 728 { .hw = &ubi32_pll.clkr.hw }, 729 { .fw_name = "bias_pll_cc_clk" }, 730 }; 731 732 static const struct parent_map gcc_xo_uniphy0_rx_tx_ubi32_bias_map[] = { 733 { P_XO, 0 }, 734 { P_UNIPHY0_RX, 1 }, 735 { P_UNIPHY0_TX, 2 }, 736 { P_UBI32_PLL, 5 }, 737 { P_BIAS_PLL, 6 }, 738 }; 739 740 static struct clk_rcg2 nss_port1_rx_clk_src = { 741 .cmd_rcgr = 0x68020, 742 .freq_tbl = ftbl_nss_port1_rx_clk_src, 743 .hid_width = 5, 744 .parent_map = gcc_xo_uniphy0_rx_tx_ubi32_bias_map, 745 .clkr.hw.init = &(struct clk_init_data){ 746 .name = "nss_port1_rx_clk_src", 747 .parent_data = gcc_xo_uniphy0_rx_tx_ubi32_bias, 748 .num_parents = 5, 749 .ops = &clk_rcg2_ops, 750 }, 751 }; 752 753 static const struct freq_tbl ftbl_nss_port1_tx_clk_src[] = { 754 F(24000000, P_XO, 1, 0, 0), 755 F(25000000, P_UNIPHY0_TX, 5, 0, 0), 756 F(125000000, P_UNIPHY0_TX, 1, 0, 0), 757 { } 758 }; 759 760 static const struct clk_parent_data gcc_xo_uniphy0_tx_rx_ubi32_bias[] = { 761 { .fw_name = "xo" }, 762 { .fw_name = "uniphy0_gcc_tx_clk" }, 763 { .fw_name = "uniphy0_gcc_rx_clk" }, 764 { .hw = &ubi32_pll.clkr.hw }, 765 { .fw_name = "bias_pll_cc_clk" }, 766 }; 767 768 static const struct parent_map gcc_xo_uniphy0_tx_rx_ubi32_bias_map[] = { 769 { P_XO, 0 }, 770 { P_UNIPHY0_TX, 1 }, 771 { P_UNIPHY0_RX, 2 }, 772 { P_UBI32_PLL, 5 }, 773 { P_BIAS_PLL, 6 }, 774 }; 775 776 static struct clk_rcg2 nss_port1_tx_clk_src = { 777 .cmd_rcgr = 0x68028, 778 .freq_tbl = ftbl_nss_port1_tx_clk_src, 779 .hid_width = 5, 780 .parent_map = gcc_xo_uniphy0_tx_rx_ubi32_bias_map, 781 .clkr.hw.init = &(struct clk_init_data){ 782 .name = "nss_port1_tx_clk_src", 783 .parent_data = gcc_xo_uniphy0_tx_rx_ubi32_bias, 784 .num_parents = 5, 785 .ops = &clk_rcg2_ops, 786 }, 787 }; 788 789 static struct clk_rcg2 nss_port2_rx_clk_src = { 790 .cmd_rcgr = 0x68030, 791 .freq_tbl = ftbl_nss_port1_rx_clk_src, 792 .hid_width = 5, 793 .parent_map = gcc_xo_uniphy0_rx_tx_ubi32_bias_map, 794 .clkr.hw.init = &(struct clk_init_data){ 795 .name = "nss_port2_rx_clk_src", 796 .parent_data = gcc_xo_uniphy0_rx_tx_ubi32_bias, 797 .num_parents = 5, 798 .ops = &clk_rcg2_ops, 799 }, 800 }; 801 802 static struct clk_rcg2 nss_port2_tx_clk_src = { 803 .cmd_rcgr = 0x68038, 804 .freq_tbl = ftbl_nss_port1_tx_clk_src, 805 .hid_width = 5, 806 .parent_map = gcc_xo_uniphy0_tx_rx_ubi32_bias_map, 807 .clkr.hw.init = &(struct clk_init_data){ 808 .name = "nss_port2_tx_clk_src", 809 .parent_data = gcc_xo_uniphy0_tx_rx_ubi32_bias, 810 .num_parents = 5, 811 .ops = &clk_rcg2_ops, 812 }, 813 }; 814 815 static struct clk_rcg2 nss_port3_rx_clk_src = { 816 .cmd_rcgr = 0x68040, 817 .freq_tbl = ftbl_nss_port1_rx_clk_src, 818 .hid_width = 5, 819 .parent_map = gcc_xo_uniphy0_rx_tx_ubi32_bias_map, 820 .clkr.hw.init = &(struct clk_init_data){ 821 .name = "nss_port3_rx_clk_src", 822 .parent_data = gcc_xo_uniphy0_rx_tx_ubi32_bias, 823 .num_parents = 5, 824 .ops = &clk_rcg2_ops, 825 }, 826 }; 827 828 static struct clk_rcg2 nss_port3_tx_clk_src = { 829 .cmd_rcgr = 0x68048, 830 .freq_tbl = ftbl_nss_port1_tx_clk_src, 831 .hid_width = 5, 832 .parent_map = gcc_xo_uniphy0_tx_rx_ubi32_bias_map, 833 .clkr.hw.init = &(struct clk_init_data){ 834 .name = "nss_port3_tx_clk_src", 835 .parent_data = gcc_xo_uniphy0_tx_rx_ubi32_bias, 836 .num_parents = 5, 837 .ops = &clk_rcg2_ops, 838 }, 839 }; 840 841 static struct clk_rcg2 nss_port4_rx_clk_src = { 842 .cmd_rcgr = 0x68050, 843 .freq_tbl = ftbl_nss_port1_rx_clk_src, 844 .hid_width = 5, 845 .parent_map = gcc_xo_uniphy0_rx_tx_ubi32_bias_map, 846 .clkr.hw.init = &(struct clk_init_data){ 847 .name = "nss_port4_rx_clk_src", 848 .parent_data = gcc_xo_uniphy0_rx_tx_ubi32_bias, 849 .num_parents = 5, 850 .ops = &clk_rcg2_ops, 851 }, 852 }; 853 854 static struct clk_rcg2 nss_port4_tx_clk_src = { 855 .cmd_rcgr = 0x68058, 856 .freq_tbl = ftbl_nss_port1_tx_clk_src, 857 .hid_width = 5, 858 .parent_map = gcc_xo_uniphy0_tx_rx_ubi32_bias_map, 859 .clkr.hw.init = &(struct clk_init_data){ 860 .name = "nss_port4_tx_clk_src", 861 .parent_data = gcc_xo_uniphy0_tx_rx_ubi32_bias, 862 .num_parents = 5, 863 .ops = &clk_rcg2_ops, 864 }, 865 }; 866 867 static struct clk_regmap_div nss_port5_rx_div_clk_src = { 868 .reg = 0x68440, 869 .shift = 0, 870 .width = 4, 871 .clkr = { 872 .hw.init = &(struct clk_init_data){ 873 .name = "nss_port5_rx_div_clk_src", 874 .parent_hws = (const struct clk_hw *[]){ 875 &nss_port5_rx_clk_src.clkr.hw }, 876 .num_parents = 1, 877 .ops = &clk_regmap_div_ops, 878 .flags = CLK_SET_RATE_PARENT, 879 }, 880 }, 881 }; 882 883 static struct clk_regmap_div nss_port5_tx_div_clk_src = { 884 .reg = 0x68444, 885 .shift = 0, 886 .width = 4, 887 .clkr = { 888 .hw.init = &(struct clk_init_data){ 889 .name = "nss_port5_tx_div_clk_src", 890 .parent_hws = (const struct clk_hw *[]){ 891 &nss_port5_tx_clk_src.clkr.hw }, 892 .num_parents = 1, 893 .ops = &clk_regmap_div_ops, 894 .flags = CLK_SET_RATE_PARENT, 895 }, 896 }, 897 }; 898 899 static const struct freq_tbl ftbl_apss_axi_clk_src[] = { 900 F(24000000, P_XO, 1, 0, 0), 901 F(100000000, P_GPLL0_DIV2, 4, 0, 0), 902 F(200000000, P_GPLL0, 4, 0, 0), 903 F(308570000, P_GPLL6, 3.5, 0, 0), 904 F(400000000, P_GPLL0, 2, 0, 0), 905 F(533000000, P_GPLL0, 1.5, 0, 0), 906 { } 907 }; 908 909 static const struct clk_parent_data gcc_xo_gpll0_gpll6_ubi32_gpll0_div2[] = { 910 { .fw_name = "xo" }, 911 { .hw = &gpll0.clkr.hw }, 912 { .hw = &gpll6.clkr.hw }, 913 { .hw = &ubi32_pll.clkr.hw }, 914 { .hw = &gpll0_out_main_div2.hw }, 915 }; 916 917 static const struct parent_map 918 gcc_xo_gpll0_gpll6_ubi32_gpll0_div2_map[] = { 919 { P_XO, 0 }, 920 { P_GPLL0, 1 }, 921 { P_GPLL6, 2 }, 922 { P_UBI32_PLL, 3 }, 923 { P_GPLL0_DIV2, 6 }, 924 }; 925 926 static struct clk_rcg2 apss_axi_clk_src = { 927 .cmd_rcgr = 0x38048, 928 .freq_tbl = ftbl_apss_axi_clk_src, 929 .hid_width = 5, 930 .parent_map = gcc_xo_gpll0_gpll6_ubi32_gpll0_div2_map, 931 .clkr.hw.init = &(struct clk_init_data){ 932 .name = "apss_axi_clk_src", 933 .parent_data = gcc_xo_gpll0_gpll6_ubi32_gpll0_div2, 934 .num_parents = 5, 935 .ops = &clk_rcg2_ops, 936 }, 937 }; 938 939 static const struct freq_tbl ftbl_nss_crypto_clk_src[] = { 940 F(24000000, P_XO, 1, 0, 0), 941 F(300000000, P_NSS_CRYPTO_PLL, 2, 0, 0), 942 { } 943 }; 944 945 static const struct clk_parent_data gcc_xo_nss_crypto_pll_gpll0[] = { 946 { .fw_name = "xo" }, 947 { .hw = &nss_crypto_pll.clkr.hw }, 948 { .hw = &gpll0.clkr.hw }, 949 }; 950 951 static const struct parent_map gcc_xo_nss_crypto_pll_gpll0_map[] = { 952 { P_XO, 0 }, 953 { P_NSS_CRYPTO_PLL, 1 }, 954 { P_GPLL0, 2 }, 955 }; 956 957 static struct clk_rcg2 nss_crypto_clk_src = { 958 .cmd_rcgr = 0x68144, 959 .freq_tbl = ftbl_nss_crypto_clk_src, 960 .mnd_width = 16, 961 .hid_width = 5, 962 .parent_map = gcc_xo_nss_crypto_pll_gpll0_map, 963 .clkr.hw.init = &(struct clk_init_data){ 964 .name = "nss_crypto_clk_src", 965 .parent_data = gcc_xo_nss_crypto_pll_gpll0, 966 .num_parents = 3, 967 .ops = &clk_rcg2_ops, 968 }, 969 }; 970 971 static struct clk_regmap_div nss_port1_rx_div_clk_src = { 972 .reg = 0x68400, 973 .shift = 0, 974 .width = 4, 975 .clkr = { 976 .hw.init = &(struct clk_init_data){ 977 .name = "nss_port1_rx_div_clk_src", 978 .parent_hws = (const struct clk_hw *[]){ 979 &nss_port1_rx_clk_src.clkr.hw }, 980 .num_parents = 1, 981 .ops = &clk_regmap_div_ops, 982 .flags = CLK_SET_RATE_PARENT, 983 }, 984 }, 985 }; 986 987 static struct clk_regmap_div nss_port1_tx_div_clk_src = { 988 .reg = 0x68404, 989 .shift = 0, 990 .width = 4, 991 .clkr = { 992 .hw.init = &(struct clk_init_data){ 993 .name = "nss_port1_tx_div_clk_src", 994 .parent_hws = (const struct clk_hw *[]){ 995 &nss_port1_tx_clk_src.clkr.hw }, 996 .num_parents = 1, 997 .ops = &clk_regmap_div_ops, 998 .flags = CLK_SET_RATE_PARENT, 999 }, 1000 }, 1001 }; 1002 1003 static struct clk_regmap_div nss_port2_rx_div_clk_src = { 1004 .reg = 0x68410, 1005 .shift = 0, 1006 .width = 4, 1007 .clkr = { 1008 .hw.init = &(struct clk_init_data){ 1009 .name = "nss_port2_rx_div_clk_src", 1010 .parent_hws = (const struct clk_hw *[]){ 1011 &nss_port2_rx_clk_src.clkr.hw }, 1012 .num_parents = 1, 1013 .ops = &clk_regmap_div_ops, 1014 .flags = CLK_SET_RATE_PARENT, 1015 }, 1016 }, 1017 }; 1018 1019 static struct clk_regmap_div nss_port2_tx_div_clk_src = { 1020 .reg = 0x68414, 1021 .shift = 0, 1022 .width = 4, 1023 .clkr = { 1024 .hw.init = &(struct clk_init_data){ 1025 .name = "nss_port2_tx_div_clk_src", 1026 .parent_hws = (const struct clk_hw *[]){ 1027 &nss_port2_tx_clk_src.clkr.hw }, 1028 .num_parents = 1, 1029 .ops = &clk_regmap_div_ops, 1030 .flags = CLK_SET_RATE_PARENT, 1031 }, 1032 }, 1033 }; 1034 1035 static struct clk_regmap_div nss_port3_rx_div_clk_src = { 1036 .reg = 0x68420, 1037 .shift = 0, 1038 .width = 4, 1039 .clkr = { 1040 .hw.init = &(struct clk_init_data){ 1041 .name = "nss_port3_rx_div_clk_src", 1042 .parent_hws = (const struct clk_hw *[]){ 1043 &nss_port3_rx_clk_src.clkr.hw }, 1044 .num_parents = 1, 1045 .ops = &clk_regmap_div_ops, 1046 .flags = CLK_SET_RATE_PARENT, 1047 }, 1048 }, 1049 }; 1050 1051 static struct clk_regmap_div nss_port3_tx_div_clk_src = { 1052 .reg = 0x68424, 1053 .shift = 0, 1054 .width = 4, 1055 .clkr = { 1056 .hw.init = &(struct clk_init_data){ 1057 .name = "nss_port3_tx_div_clk_src", 1058 .parent_hws = (const struct clk_hw *[]){ 1059 &nss_port3_tx_clk_src.clkr.hw }, 1060 .num_parents = 1, 1061 .ops = &clk_regmap_div_ops, 1062 .flags = CLK_SET_RATE_PARENT, 1063 }, 1064 }, 1065 }; 1066 1067 static struct clk_regmap_div nss_port4_rx_div_clk_src = { 1068 .reg = 0x68430, 1069 .shift = 0, 1070 .width = 4, 1071 .clkr = { 1072 .hw.init = &(struct clk_init_data){ 1073 .name = "nss_port4_rx_div_clk_src", 1074 .parent_hws = (const struct clk_hw *[]){ 1075 &nss_port4_rx_clk_src.clkr.hw }, 1076 .num_parents = 1, 1077 .ops = &clk_regmap_div_ops, 1078 .flags = CLK_SET_RATE_PARENT, 1079 }, 1080 }, 1081 }; 1082 1083 static struct clk_regmap_div nss_port4_tx_div_clk_src = { 1084 .reg = 0x68434, 1085 .shift = 0, 1086 .width = 4, 1087 .clkr = { 1088 .hw.init = &(struct clk_init_data){ 1089 .name = "nss_port4_tx_div_clk_src", 1090 .parent_hws = (const struct clk_hw *[]){ 1091 &nss_port4_tx_clk_src.clkr.hw }, 1092 .num_parents = 1, 1093 .ops = &clk_regmap_div_ops, 1094 .flags = CLK_SET_RATE_PARENT, 1095 }, 1096 }, 1097 }; 1098 1099 static const struct freq_tbl ftbl_nss_ubi_clk_src[] = { 1100 F(24000000, P_XO, 1, 0, 0), 1101 F(149760000, P_UBI32_PLL, 10, 0, 0), 1102 F(187200000, P_UBI32_PLL, 8, 0, 0), 1103 F(249600000, P_UBI32_PLL, 6, 0, 0), 1104 F(374400000, P_UBI32_PLL, 4, 0, 0), 1105 F(748800000, P_UBI32_PLL, 2, 0, 0), 1106 F(1497600000, P_UBI32_PLL, 1, 0, 0), 1107 { } 1108 }; 1109 1110 static const struct clk_parent_data 1111 gcc_xo_ubi32_pll_gpll0_gpll2_gpll4_gpll6[] = { 1112 { .fw_name = "xo" }, 1113 { .hw = &ubi32_pll.clkr.hw }, 1114 { .hw = &gpll0.clkr.hw }, 1115 { .hw = &gpll2.clkr.hw }, 1116 { .hw = &gpll4.clkr.hw }, 1117 { .hw = &gpll6.clkr.hw }, 1118 }; 1119 1120 static const struct parent_map gcc_xo_ubi32_gpll0_gpll2_gpll4_gpll6_map[] = { 1121 { P_XO, 0 }, 1122 { P_UBI32_PLL, 1 }, 1123 { P_GPLL0, 2 }, 1124 { P_GPLL2, 3 }, 1125 { P_GPLL4, 4 }, 1126 { P_GPLL6, 5 }, 1127 }; 1128 1129 static struct clk_rcg2 nss_ubi0_clk_src = { 1130 .cmd_rcgr = 0x68104, 1131 .freq_tbl = ftbl_nss_ubi_clk_src, 1132 .hid_width = 5, 1133 .parent_map = gcc_xo_ubi32_gpll0_gpll2_gpll4_gpll6_map, 1134 .clkr.hw.init = &(struct clk_init_data){ 1135 .name = "nss_ubi0_clk_src", 1136 .parent_data = gcc_xo_ubi32_pll_gpll0_gpll2_gpll4_gpll6, 1137 .num_parents = 6, 1138 .ops = &clk_rcg2_ops, 1139 .flags = CLK_SET_RATE_PARENT, 1140 }, 1141 }; 1142 1143 static const struct freq_tbl ftbl_adss_pwm_clk_src[] = { 1144 F(24000000, P_XO, 1, 0, 0), 1145 F(100000000, P_GPLL0, 8, 0, 0), 1146 { } 1147 }; 1148 1149 static struct clk_rcg2 adss_pwm_clk_src = { 1150 .cmd_rcgr = 0x1c008, 1151 .freq_tbl = ftbl_adss_pwm_clk_src, 1152 .hid_width = 5, 1153 .parent_map = gcc_xo_gpll0_map, 1154 .clkr.hw.init = &(struct clk_init_data){ 1155 .name = "adss_pwm_clk_src", 1156 .parent_data = gcc_xo_gpll0, 1157 .num_parents = 2, 1158 .ops = &clk_rcg2_ops, 1159 }, 1160 }; 1161 1162 static const struct freq_tbl ftbl_blsp1_qup_i2c_apps_clk_src[] = { 1163 F(24000000, P_XO, 1, 0, 0), 1164 F(25000000, P_GPLL0_DIV2, 16, 0, 0), 1165 F(50000000, P_GPLL0, 16, 0, 0), 1166 { } 1167 }; 1168 1169 static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = { 1170 .cmd_rcgr = 0x0200c, 1171 .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src, 1172 .hid_width = 5, 1173 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map, 1174 .clkr.hw.init = &(struct clk_init_data){ 1175 .name = "blsp1_qup1_i2c_apps_clk_src", 1176 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2, 1177 .num_parents = 3, 1178 .ops = &clk_rcg2_ops, 1179 }, 1180 }; 1181 1182 static const struct freq_tbl ftbl_blsp1_qup_spi_apps_clk_src[] = { 1183 F(960000, P_XO, 10, 2, 5), 1184 F(4800000, P_XO, 5, 0, 0), 1185 F(9600000, P_XO, 2, 4, 5), 1186 F(12500000, P_GPLL0_DIV2, 16, 1, 2), 1187 F(16000000, P_GPLL0, 10, 1, 5), 1188 F(24000000, P_XO, 1, 0, 0), 1189 F(25000000, P_GPLL0, 16, 1, 2), 1190 F(50000000, P_GPLL0, 16, 0, 0), 1191 { } 1192 }; 1193 1194 static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = { 1195 .cmd_rcgr = 0x02024, 1196 .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src, 1197 .mnd_width = 8, 1198 .hid_width = 5, 1199 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map, 1200 .clkr.hw.init = &(struct clk_init_data){ 1201 .name = "blsp1_qup1_spi_apps_clk_src", 1202 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2, 1203 .num_parents = 3, 1204 .ops = &clk_rcg2_ops, 1205 }, 1206 }; 1207 1208 static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = { 1209 .cmd_rcgr = 0x03000, 1210 .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src, 1211 .hid_width = 5, 1212 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map, 1213 .clkr.hw.init = &(struct clk_init_data){ 1214 .name = "blsp1_qup2_i2c_apps_clk_src", 1215 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2, 1216 .num_parents = 3, 1217 .ops = &clk_rcg2_ops, 1218 }, 1219 }; 1220 1221 static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = { 1222 .cmd_rcgr = 0x03014, 1223 .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src, 1224 .mnd_width = 8, 1225 .hid_width = 5, 1226 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map, 1227 .clkr.hw.init = &(struct clk_init_data){ 1228 .name = "blsp1_qup2_spi_apps_clk_src", 1229 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2, 1230 .num_parents = 3, 1231 .ops = &clk_rcg2_ops, 1232 }, 1233 }; 1234 1235 static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = { 1236 .cmd_rcgr = 0x04000, 1237 .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src, 1238 .hid_width = 5, 1239 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map, 1240 .clkr.hw.init = &(struct clk_init_data){ 1241 .name = "blsp1_qup3_i2c_apps_clk_src", 1242 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2, 1243 .num_parents = 3, 1244 .ops = &clk_rcg2_ops, 1245 }, 1246 }; 1247 1248 static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = { 1249 .cmd_rcgr = 0x04014, 1250 .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src, 1251 .mnd_width = 8, 1252 .hid_width = 5, 1253 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map, 1254 .clkr.hw.init = &(struct clk_init_data){ 1255 .name = "blsp1_qup3_spi_apps_clk_src", 1256 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2, 1257 .num_parents = 3, 1258 .ops = &clk_rcg2_ops, 1259 }, 1260 }; 1261 1262 static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = { 1263 .cmd_rcgr = 0x05000, 1264 .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src, 1265 .hid_width = 5, 1266 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map, 1267 .clkr.hw.init = &(struct clk_init_data){ 1268 .name = "blsp1_qup4_i2c_apps_clk_src", 1269 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2, 1270 .num_parents = 3, 1271 .ops = &clk_rcg2_ops, 1272 }, 1273 }; 1274 1275 static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = { 1276 .cmd_rcgr = 0x05014, 1277 .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src, 1278 .mnd_width = 8, 1279 .hid_width = 5, 1280 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map, 1281 .clkr.hw.init = &(struct clk_init_data){ 1282 .name = "blsp1_qup4_spi_apps_clk_src", 1283 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2, 1284 .num_parents = 3, 1285 .ops = &clk_rcg2_ops, 1286 }, 1287 }; 1288 1289 static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = { 1290 .cmd_rcgr = 0x06000, 1291 .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src, 1292 .hid_width = 5, 1293 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map, 1294 .clkr.hw.init = &(struct clk_init_data){ 1295 .name = "blsp1_qup5_i2c_apps_clk_src", 1296 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2, 1297 .num_parents = 3, 1298 .ops = &clk_rcg2_ops, 1299 }, 1300 }; 1301 1302 static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = { 1303 .cmd_rcgr = 0x06014, 1304 .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src, 1305 .mnd_width = 8, 1306 .hid_width = 5, 1307 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map, 1308 .clkr.hw.init = &(struct clk_init_data){ 1309 .name = "blsp1_qup5_spi_apps_clk_src", 1310 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2, 1311 .num_parents = 3, 1312 .ops = &clk_rcg2_ops, 1313 }, 1314 }; 1315 1316 static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = { 1317 .cmd_rcgr = 0x07000, 1318 .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src, 1319 .hid_width = 5, 1320 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map, 1321 .clkr.hw.init = &(struct clk_init_data){ 1322 .name = "blsp1_qup6_i2c_apps_clk_src", 1323 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2, 1324 .num_parents = 3, 1325 .ops = &clk_rcg2_ops, 1326 }, 1327 }; 1328 1329 static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = { 1330 .cmd_rcgr = 0x07014, 1331 .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src, 1332 .mnd_width = 8, 1333 .hid_width = 5, 1334 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map, 1335 .clkr.hw.init = &(struct clk_init_data){ 1336 .name = "blsp1_qup6_spi_apps_clk_src", 1337 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2, 1338 .num_parents = 3, 1339 .ops = &clk_rcg2_ops, 1340 }, 1341 }; 1342 1343 static const struct freq_tbl ftbl_blsp1_uart_apps_clk_src[] = { 1344 F(3686400, P_GPLL0_DIV2, 1, 144, 15625), 1345 F(7372800, P_GPLL0_DIV2, 1, 288, 15625), 1346 F(14745600, P_GPLL0_DIV2, 1, 576, 15625), 1347 F(16000000, P_GPLL0_DIV2, 5, 1, 5), 1348 F(24000000, P_XO, 1, 0, 0), 1349 F(24000000, P_GPLL0, 1, 3, 100), 1350 F(25000000, P_GPLL0, 16, 1, 2), 1351 F(32000000, P_GPLL0, 1, 1, 25), 1352 F(40000000, P_GPLL0, 1, 1, 20), 1353 F(46400000, P_GPLL0, 1, 29, 500), 1354 F(48000000, P_GPLL0, 1, 3, 50), 1355 F(51200000, P_GPLL0, 1, 8, 125), 1356 F(56000000, P_GPLL0, 1, 7, 100), 1357 F(58982400, P_GPLL0, 1, 1152, 15625), 1358 F(60000000, P_GPLL0, 1, 3, 40), 1359 F(64000000, P_GPLL0, 12.5, 1, 1), 1360 { } 1361 }; 1362 1363 static struct clk_rcg2 blsp1_uart1_apps_clk_src = { 1364 .cmd_rcgr = 0x02044, 1365 .freq_tbl = ftbl_blsp1_uart_apps_clk_src, 1366 .mnd_width = 16, 1367 .hid_width = 5, 1368 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map, 1369 .clkr.hw.init = &(struct clk_init_data){ 1370 .name = "blsp1_uart1_apps_clk_src", 1371 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2, 1372 .num_parents = 3, 1373 .ops = &clk_rcg2_ops, 1374 }, 1375 }; 1376 1377 static struct clk_rcg2 blsp1_uart2_apps_clk_src = { 1378 .cmd_rcgr = 0x03034, 1379 .freq_tbl = ftbl_blsp1_uart_apps_clk_src, 1380 .mnd_width = 16, 1381 .hid_width = 5, 1382 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map, 1383 .clkr.hw.init = &(struct clk_init_data){ 1384 .name = "blsp1_uart2_apps_clk_src", 1385 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2, 1386 .num_parents = 3, 1387 .ops = &clk_rcg2_ops, 1388 }, 1389 }; 1390 1391 static struct clk_rcg2 blsp1_uart3_apps_clk_src = { 1392 .cmd_rcgr = 0x04034, 1393 .freq_tbl = ftbl_blsp1_uart_apps_clk_src, 1394 .mnd_width = 16, 1395 .hid_width = 5, 1396 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map, 1397 .clkr.hw.init = &(struct clk_init_data){ 1398 .name = "blsp1_uart3_apps_clk_src", 1399 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2, 1400 .num_parents = 3, 1401 .ops = &clk_rcg2_ops, 1402 }, 1403 }; 1404 1405 static struct clk_rcg2 blsp1_uart4_apps_clk_src = { 1406 .cmd_rcgr = 0x05034, 1407 .freq_tbl = ftbl_blsp1_uart_apps_clk_src, 1408 .mnd_width = 16, 1409 .hid_width = 5, 1410 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map, 1411 .clkr.hw.init = &(struct clk_init_data){ 1412 .name = "blsp1_uart4_apps_clk_src", 1413 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2, 1414 .num_parents = 3, 1415 .ops = &clk_rcg2_ops, 1416 }, 1417 }; 1418 1419 static struct clk_rcg2 blsp1_uart5_apps_clk_src = { 1420 .cmd_rcgr = 0x06034, 1421 .freq_tbl = ftbl_blsp1_uart_apps_clk_src, 1422 .mnd_width = 16, 1423 .hid_width = 5, 1424 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map, 1425 .clkr.hw.init = &(struct clk_init_data){ 1426 .name = "blsp1_uart5_apps_clk_src", 1427 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2, 1428 .num_parents = 3, 1429 .ops = &clk_rcg2_ops, 1430 }, 1431 }; 1432 1433 static struct clk_rcg2 blsp1_uart6_apps_clk_src = { 1434 .cmd_rcgr = 0x07034, 1435 .freq_tbl = ftbl_blsp1_uart_apps_clk_src, 1436 .mnd_width = 16, 1437 .hid_width = 5, 1438 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map, 1439 .clkr.hw.init = &(struct clk_init_data){ 1440 .name = "blsp1_uart6_apps_clk_src", 1441 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2, 1442 .num_parents = 3, 1443 .ops = &clk_rcg2_ops, 1444 }, 1445 }; 1446 1447 static const struct freq_tbl ftbl_crypto_clk_src[] = { 1448 F(40000000, P_GPLL0_DIV2, 10, 0, 0), 1449 F(80000000, P_GPLL0, 10, 0, 0), 1450 F(100000000, P_GPLL0, 8, 0, 0), 1451 F(160000000, P_GPLL0, 5, 0, 0), 1452 { } 1453 }; 1454 1455 static struct clk_rcg2 crypto_clk_src = { 1456 .cmd_rcgr = 0x16004, 1457 .freq_tbl = ftbl_crypto_clk_src, 1458 .hid_width = 5, 1459 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map, 1460 .clkr.hw.init = &(struct clk_init_data){ 1461 .name = "crypto_clk_src", 1462 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2, 1463 .num_parents = 3, 1464 .ops = &clk_rcg2_ops, 1465 }, 1466 }; 1467 1468 static const struct freq_tbl ftbl_gp_clk_src[] = { 1469 F(24000000, P_XO, 1, 0, 0), 1470 F(50000000, P_GPLL0_DIV2, 8, 0, 0), 1471 F(100000000, P_GPLL0, 8, 0, 0), 1472 F(200000000, P_GPLL0, 4, 0, 0), 1473 F(266666666, P_GPLL0, 3, 0, 0), 1474 { } 1475 }; 1476 1477 static const struct clk_parent_data gcc_xo_gpll0_gpll6_gpll0_sleep_clk[] = { 1478 { .fw_name = "xo" }, 1479 { .hw = &gpll0.clkr.hw }, 1480 { .hw = &gpll6.clkr.hw }, 1481 { .hw = &gpll0_out_main_div2.hw }, 1482 { .fw_name = "sleep_clk" }, 1483 }; 1484 1485 static const struct parent_map gcc_xo_gpll0_gpll6_gpll0_sleep_clk_map[] = { 1486 { P_XO, 0 }, 1487 { P_GPLL0, 1 }, 1488 { P_GPLL6, 2 }, 1489 { P_GPLL0_DIV2, 4 }, 1490 { P_SLEEP_CLK, 6 }, 1491 }; 1492 1493 static struct clk_rcg2 gp1_clk_src = { 1494 .cmd_rcgr = 0x08004, 1495 .freq_tbl = ftbl_gp_clk_src, 1496 .mnd_width = 8, 1497 .hid_width = 5, 1498 .parent_map = gcc_xo_gpll0_gpll6_gpll0_sleep_clk_map, 1499 .clkr.hw.init = &(struct clk_init_data){ 1500 .name = "gp1_clk_src", 1501 .parent_data = gcc_xo_gpll0_gpll6_gpll0_sleep_clk, 1502 .num_parents = 5, 1503 .ops = &clk_rcg2_ops, 1504 }, 1505 }; 1506 1507 static struct clk_rcg2 gp2_clk_src = { 1508 .cmd_rcgr = 0x09004, 1509 .freq_tbl = ftbl_gp_clk_src, 1510 .mnd_width = 8, 1511 .hid_width = 5, 1512 .parent_map = gcc_xo_gpll0_gpll6_gpll0_sleep_clk_map, 1513 .clkr.hw.init = &(struct clk_init_data){ 1514 .name = "gp2_clk_src", 1515 .parent_data = gcc_xo_gpll0_gpll6_gpll0_sleep_clk, 1516 .num_parents = 5, 1517 .ops = &clk_rcg2_ops, 1518 }, 1519 }; 1520 1521 static struct clk_rcg2 gp3_clk_src = { 1522 .cmd_rcgr = 0x0a004, 1523 .freq_tbl = ftbl_gp_clk_src, 1524 .mnd_width = 8, 1525 .hid_width = 5, 1526 .parent_map = gcc_xo_gpll0_gpll6_gpll0_sleep_clk_map, 1527 .clkr.hw.init = &(struct clk_init_data){ 1528 .name = "gp3_clk_src", 1529 .parent_data = gcc_xo_gpll0_gpll6_gpll0_sleep_clk, 1530 .num_parents = 5, 1531 .ops = &clk_rcg2_ops, 1532 }, 1533 }; 1534 1535 static struct clk_fixed_factor nss_ppe_cdiv_clk_src = { 1536 .mult = 1, 1537 .div = 4, 1538 .hw.init = &(struct clk_init_data){ 1539 .name = "nss_ppe_cdiv_clk_src", 1540 .parent_hws = (const struct clk_hw *[]){ 1541 &nss_ppe_clk_src.clkr.hw }, 1542 .num_parents = 1, 1543 .ops = &clk_fixed_factor_ops, 1544 .flags = CLK_SET_RATE_PARENT, 1545 }, 1546 }; 1547 1548 static struct clk_regmap_div nss_ubi0_div_clk_src = { 1549 .reg = 0x68118, 1550 .shift = 0, 1551 .width = 4, 1552 .clkr = { 1553 .hw.init = &(struct clk_init_data){ 1554 .name = "nss_ubi0_div_clk_src", 1555 .parent_hws = (const struct clk_hw *[]){ 1556 &nss_ubi0_clk_src.clkr.hw }, 1557 .num_parents = 1, 1558 .ops = &clk_regmap_div_ro_ops, 1559 .flags = CLK_SET_RATE_PARENT, 1560 }, 1561 }, 1562 }; 1563 1564 static const struct freq_tbl ftbl_pcie_aux_clk_src[] = { 1565 F(24000000, P_XO, 1, 0, 0), 1566 }; 1567 1568 static const struct clk_parent_data gcc_xo_gpll0_core_pi_sleep_clk[] = { 1569 { .fw_name = "xo" }, 1570 { .hw = &gpll0.clkr.hw }, 1571 { .fw_name = "sleep_clk" }, 1572 }; 1573 1574 static const struct parent_map gcc_xo_gpll0_core_pi_sleep_clk_map[] = { 1575 { P_XO, 0 }, 1576 { P_GPLL0, 2 }, 1577 { P_PI_SLEEP, 6 }, 1578 }; 1579 1580 static struct clk_rcg2 pcie0_aux_clk_src = { 1581 .cmd_rcgr = 0x75024, 1582 .freq_tbl = ftbl_pcie_aux_clk_src, 1583 .mnd_width = 16, 1584 .hid_width = 5, 1585 .parent_map = gcc_xo_gpll0_core_pi_sleep_clk_map, 1586 .clkr.hw.init = &(struct clk_init_data){ 1587 .name = "pcie0_aux_clk_src", 1588 .parent_data = gcc_xo_gpll0_core_pi_sleep_clk, 1589 .num_parents = 3, 1590 .ops = &clk_rcg2_ops, 1591 }, 1592 }; 1593 1594 static const struct clk_parent_data gcc_pcie20_phy0_pipe_clk_xo[] = { 1595 { .fw_name = "pcie20_phy0_pipe_clk" }, 1596 { .fw_name = "xo" }, 1597 }; 1598 1599 static const struct parent_map gcc_pcie20_phy0_pipe_clk_xo_map[] = { 1600 { P_PCIE20_PHY0_PIPE, 0 }, 1601 { P_XO, 2 }, 1602 }; 1603 1604 static struct clk_regmap_mux pcie0_pipe_clk_src = { 1605 .reg = 0x7501c, 1606 .shift = 8, 1607 .width = 2, 1608 .parent_map = gcc_pcie20_phy0_pipe_clk_xo_map, 1609 .clkr = { 1610 .hw.init = &(struct clk_init_data){ 1611 .name = "pcie0_pipe_clk_src", 1612 .parent_data = gcc_pcie20_phy0_pipe_clk_xo, 1613 .num_parents = 2, 1614 .ops = &clk_regmap_mux_closest_ops, 1615 .flags = CLK_SET_RATE_PARENT, 1616 }, 1617 }, 1618 }; 1619 1620 static const struct freq_tbl ftbl_sdcc_apps_clk_src[] = { 1621 F(144000, P_XO, 16, 12, 125), 1622 F(400000, P_XO, 12, 1, 5), 1623 F(24000000, P_GPLL2, 12, 1, 4), 1624 F(48000000, P_GPLL2, 12, 1, 2), 1625 F(96000000, P_GPLL2, 12, 0, 0), 1626 F(177777778, P_GPLL0, 4.5, 0, 0), 1627 F(192000000, P_GPLL2, 6, 0, 0), 1628 F(384000000, P_GPLL2, 3, 0, 0), 1629 { } 1630 }; 1631 1632 static const struct clk_parent_data 1633 gcc_xo_gpll0_gpll2_gpll0_out_main_div2[] = { 1634 { .fw_name = "xo" }, 1635 { .hw = &gpll0.clkr.hw }, 1636 { .hw = &gpll2.clkr.hw }, 1637 { .hw = &gpll0_out_main_div2.hw }, 1638 }; 1639 1640 static const struct parent_map gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map[] = { 1641 { P_XO, 0 }, 1642 { P_GPLL0, 1 }, 1643 { P_GPLL2, 2 }, 1644 { P_GPLL0_DIV2, 4 }, 1645 }; 1646 1647 static struct clk_rcg2 sdcc1_apps_clk_src = { 1648 .cmd_rcgr = 0x42004, 1649 .freq_tbl = ftbl_sdcc_apps_clk_src, 1650 .mnd_width = 8, 1651 .hid_width = 5, 1652 .parent_map = gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map, 1653 .clkr.hw.init = &(struct clk_init_data){ 1654 .name = "sdcc1_apps_clk_src", 1655 .parent_data = gcc_xo_gpll0_gpll2_gpll0_out_main_div2, 1656 .num_parents = 4, 1657 .ops = &clk_rcg2_ops, 1658 }, 1659 }; 1660 1661 static const struct freq_tbl ftbl_usb_aux_clk_src[] = { 1662 F(24000000, P_XO, 1, 0, 0), 1663 { } 1664 }; 1665 1666 static struct clk_rcg2 usb0_aux_clk_src = { 1667 .cmd_rcgr = 0x3e05c, 1668 .freq_tbl = ftbl_usb_aux_clk_src, 1669 .mnd_width = 16, 1670 .hid_width = 5, 1671 .parent_map = gcc_xo_gpll0_core_pi_sleep_clk_map, 1672 .clkr.hw.init = &(struct clk_init_data){ 1673 .name = "usb0_aux_clk_src", 1674 .parent_data = gcc_xo_gpll0_core_pi_sleep_clk, 1675 .num_parents = 3, 1676 .ops = &clk_rcg2_ops, 1677 }, 1678 }; 1679 1680 static const struct freq_tbl ftbl_usb_mock_utmi_clk_src[] = { 1681 F(24000000, P_XO, 1, 0, 0), 1682 F(60000000, P_GPLL6, 6, 1, 3), 1683 { } 1684 }; 1685 1686 static const struct clk_parent_data 1687 gcc_xo_gpll6_gpll0_gpll0_out_main_div2[] = { 1688 { .fw_name = "xo" }, 1689 { .hw = &gpll6.clkr.hw }, 1690 { .hw = &gpll0.clkr.hw }, 1691 { .hw = &gpll0_out_main_div2.hw }, 1692 }; 1693 1694 static const struct parent_map gcc_xo_gpll6_gpll0_gpll0_out_main_div2_map[] = { 1695 { P_XO, 0 }, 1696 { P_GPLL6, 1 }, 1697 { P_GPLL0, 3 }, 1698 { P_GPLL0_DIV2, 4 }, 1699 }; 1700 1701 static struct clk_rcg2 usb0_mock_utmi_clk_src = { 1702 .cmd_rcgr = 0x3e020, 1703 .freq_tbl = ftbl_usb_mock_utmi_clk_src, 1704 .mnd_width = 8, 1705 .hid_width = 5, 1706 .parent_map = gcc_xo_gpll6_gpll0_gpll0_out_main_div2_map, 1707 .clkr.hw.init = &(struct clk_init_data){ 1708 .name = "usb0_mock_utmi_clk_src", 1709 .parent_data = gcc_xo_gpll6_gpll0_gpll0_out_main_div2, 1710 .num_parents = 4, 1711 .ops = &clk_rcg2_ops, 1712 }, 1713 }; 1714 1715 static const struct clk_parent_data gcc_usb3phy_0_cc_pipe_clk_xo[] = { 1716 { .fw_name = "usb3phy_0_cc_pipe_clk" }, 1717 { .fw_name = "xo" }, 1718 }; 1719 1720 static const struct parent_map gcc_usb3phy_0_cc_pipe_clk_xo_map[] = { 1721 { P_USB3PHY_0_PIPE, 0 }, 1722 { P_XO, 2 }, 1723 }; 1724 1725 static struct clk_regmap_mux usb0_pipe_clk_src = { 1726 .reg = 0x3e048, 1727 .shift = 8, 1728 .width = 2, 1729 .parent_map = gcc_usb3phy_0_cc_pipe_clk_xo_map, 1730 .clkr = { 1731 .hw.init = &(struct clk_init_data){ 1732 .name = "usb0_pipe_clk_src", 1733 .parent_data = gcc_usb3phy_0_cc_pipe_clk_xo, 1734 .num_parents = 2, 1735 .ops = &clk_regmap_mux_closest_ops, 1736 .flags = CLK_SET_RATE_PARENT, 1737 }, 1738 }, 1739 }; 1740 1741 static const struct freq_tbl ftbl_sdcc_ice_core_clk_src[] = { 1742 F(80000000, P_GPLL0_DIV2, 5, 0, 0), 1743 F(160000000, P_GPLL0, 5, 0, 0), 1744 F(216000000, P_GPLL6, 5, 0, 0), 1745 F(308570000, P_GPLL6, 3.5, 0, 0), 1746 }; 1747 1748 static const struct clk_parent_data gcc_xo_gpll0_gpll6_gpll0_div2[] = { 1749 { .fw_name = "xo"}, 1750 { .hw = &gpll0.clkr.hw }, 1751 { .hw = &gpll6.clkr.hw }, 1752 { .hw = &gpll0_out_main_div2.hw }, 1753 }; 1754 1755 static const struct parent_map gcc_xo_gpll0_gpll6_gpll0_div2_map[] = { 1756 { P_XO, 0 }, 1757 { P_GPLL0, 1 }, 1758 { P_GPLL6, 2 }, 1759 { P_GPLL0_DIV2, 4 }, 1760 }; 1761 1762 static struct clk_rcg2 sdcc1_ice_core_clk_src = { 1763 .cmd_rcgr = 0x5d000, 1764 .freq_tbl = ftbl_sdcc_ice_core_clk_src, 1765 .mnd_width = 8, 1766 .hid_width = 5, 1767 .parent_map = gcc_xo_gpll0_gpll6_gpll0_div2_map, 1768 .clkr.hw.init = &(struct clk_init_data){ 1769 .name = "sdcc1_ice_core_clk_src", 1770 .parent_data = gcc_xo_gpll0_gpll6_gpll0_div2, 1771 .num_parents = 4, 1772 .ops = &clk_rcg2_ops, 1773 }, 1774 }; 1775 1776 static const struct freq_tbl ftbl_qdss_stm_clk_src[] = { 1777 F(24000000, P_XO, 1, 0, 0), 1778 F(50000000, P_GPLL0_DIV2, 8, 0, 0), 1779 F(100000000, P_GPLL0, 8, 0, 0), 1780 F(200000000, P_GPLL0, 4, 0, 0), 1781 { } 1782 }; 1783 1784 static struct clk_rcg2 qdss_stm_clk_src = { 1785 .cmd_rcgr = 0x2902C, 1786 .freq_tbl = ftbl_qdss_stm_clk_src, 1787 .hid_width = 5, 1788 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map, 1789 .clkr.hw.init = &(struct clk_init_data){ 1790 .name = "qdss_stm_clk_src", 1791 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2, 1792 .num_parents = 3, 1793 .ops = &clk_rcg2_ops, 1794 }, 1795 }; 1796 1797 static const struct freq_tbl ftbl_qdss_traceclkin_clk_src[] = { 1798 F(80000000, P_GPLL0_DIV2, 5, 0, 0), 1799 F(160000000, P_GPLL0, 5, 0, 0), 1800 F(300000000, P_GPLL4, 4, 0, 0), 1801 { } 1802 }; 1803 1804 static const struct clk_parent_data gcc_xo_gpll4_gpll0_gpll0_div2[] = { 1805 { .fw_name = "xo" }, 1806 { .hw = &gpll4.clkr.hw }, 1807 { .hw = &gpll0.clkr.hw }, 1808 { .hw = &gpll0_out_main_div2.hw }, 1809 }; 1810 1811 static const struct parent_map gcc_xo_gpll4_gpll0_gpll0_div2_map[] = { 1812 { P_XO, 0 }, 1813 { P_GPLL4, 1 }, 1814 { P_GPLL0, 2 }, 1815 { P_GPLL0_DIV2, 4 }, 1816 }; 1817 1818 static struct clk_rcg2 qdss_traceclkin_clk_src = { 1819 .cmd_rcgr = 0x29048, 1820 .freq_tbl = ftbl_qdss_traceclkin_clk_src, 1821 .hid_width = 5, 1822 .parent_map = gcc_xo_gpll4_gpll0_gpll0_div2_map, 1823 .clkr.hw.init = &(struct clk_init_data){ 1824 .name = "qdss_traceclkin_clk_src", 1825 .parent_data = gcc_xo_gpll4_gpll0_gpll0_div2, 1826 .num_parents = 4, 1827 .ops = &clk_rcg2_ops, 1828 }, 1829 }; 1830 1831 static struct clk_rcg2 usb1_mock_utmi_clk_src = { 1832 .cmd_rcgr = 0x3f020, 1833 .freq_tbl = ftbl_usb_mock_utmi_clk_src, 1834 .mnd_width = 8, 1835 .hid_width = 5, 1836 .parent_map = gcc_xo_gpll6_gpll0_gpll0_out_main_div2_map, 1837 .clkr.hw.init = &(struct clk_init_data){ 1838 .name = "usb1_mock_utmi_clk_src", 1839 .parent_data = gcc_xo_gpll6_gpll0_gpll0_out_main_div2, 1840 .num_parents = 4, 1841 .ops = &clk_rcg2_ops, 1842 }, 1843 }; 1844 1845 static struct clk_branch gcc_adss_pwm_clk = { 1846 .halt_reg = 0x1c020, 1847 .clkr = { 1848 .enable_reg = 0x1c020, 1849 .enable_mask = BIT(0), 1850 .hw.init = &(struct clk_init_data){ 1851 .name = "gcc_adss_pwm_clk", 1852 .parent_hws = (const struct clk_hw *[]){ 1853 &adss_pwm_clk_src.clkr.hw }, 1854 .num_parents = 1, 1855 .flags = CLK_SET_RATE_PARENT, 1856 .ops = &clk_branch2_ops, 1857 }, 1858 }, 1859 }; 1860 1861 static struct clk_branch gcc_apss_ahb_clk = { 1862 .halt_reg = 0x4601c, 1863 .halt_check = BRANCH_HALT_VOTED, 1864 .clkr = { 1865 .enable_reg = 0x0b004, 1866 .enable_mask = BIT(14), 1867 .hw.init = &(struct clk_init_data){ 1868 .name = "gcc_apss_ahb_clk", 1869 .parent_hws = (const struct clk_hw *[]){ 1870 &apss_ahb_postdiv_clk_src.clkr.hw }, 1871 .num_parents = 1, 1872 .flags = CLK_SET_RATE_PARENT, 1873 .ops = &clk_branch2_ops, 1874 }, 1875 }, 1876 }; 1877 1878 static const struct freq_tbl ftbl_system_noc_bfdcd_clk_src[] = { 1879 F(24000000, P_XO, 1, 0, 0), 1880 F(50000000, P_GPLL0_DIV2, 8, 0, 0), 1881 F(100000000, P_GPLL0, 8, 0, 0), 1882 F(133333333, P_GPLL0, 6, 0, 0), 1883 F(160000000, P_GPLL0, 5, 0, 0), 1884 F(200000000, P_GPLL0, 4, 0, 0), 1885 F(266666667, P_GPLL0, 3, 0, 0), 1886 { } 1887 }; 1888 1889 static struct clk_rcg2 system_noc_bfdcd_clk_src = { 1890 .cmd_rcgr = 0x26004, 1891 .freq_tbl = ftbl_system_noc_bfdcd_clk_src, 1892 .hid_width = 5, 1893 .parent_map = gcc_xo_gpll0_gpll6_gpll0_out_main_div2_map, 1894 .clkr.hw.init = &(struct clk_init_data){ 1895 .name = "system_noc_bfdcd_clk_src", 1896 .parent_data = gcc_xo_gpll0_gpll6_gpll0_out_main_div2, 1897 .num_parents = 4, 1898 .ops = &clk_rcg2_ops, 1899 }, 1900 }; 1901 1902 static const struct freq_tbl ftbl_ubi32_mem_noc_bfdcd_clk_src[] = { 1903 F(24000000, P_XO, 1, 0, 0), 1904 F(307670000, P_BIAS_PLL_NSS_NOC, 1.5, 0, 0), 1905 F(533333333, P_GPLL0, 1.5, 0, 0), 1906 { } 1907 }; 1908 1909 static const struct clk_parent_data 1910 gcc_xo_gpll0_gpll2_bias_pll_nss_noc_clk[] = { 1911 { .fw_name = "xo" }, 1912 { .hw = &gpll0.clkr.hw }, 1913 { .hw = &gpll2.clkr.hw }, 1914 { .fw_name = "bias_pll_nss_noc_clk" }, 1915 }; 1916 1917 static const struct parent_map gcc_xo_gpll0_gpll2_bias_pll_nss_noc_clk_map[] = { 1918 { P_XO, 0 }, 1919 { P_GPLL0, 1 }, 1920 { P_GPLL2, 3 }, 1921 { P_BIAS_PLL_NSS_NOC, 4 }, 1922 }; 1923 1924 static struct clk_rcg2 ubi32_mem_noc_bfdcd_clk_src = { 1925 .cmd_rcgr = 0x68088, 1926 .freq_tbl = ftbl_ubi32_mem_noc_bfdcd_clk_src, 1927 .hid_width = 5, 1928 .parent_map = gcc_xo_gpll0_gpll2_bias_pll_nss_noc_clk_map, 1929 .clkr.hw.init = &(struct clk_init_data){ 1930 .name = "ubi32_mem_noc_bfdcd_clk_src", 1931 .parent_data = gcc_xo_gpll0_gpll2_bias_pll_nss_noc_clk, 1932 .num_parents = 4, 1933 .ops = &clk_rcg2_ops, 1934 }, 1935 }; 1936 1937 static struct clk_branch gcc_apss_axi_clk = { 1938 .halt_reg = 0x46020, 1939 .halt_check = BRANCH_HALT_VOTED, 1940 .clkr = { 1941 .enable_reg = 0x0b004, 1942 .enable_mask = BIT(13), 1943 .hw.init = &(struct clk_init_data){ 1944 .name = "gcc_apss_axi_clk", 1945 .parent_hws = (const struct clk_hw *[]){ 1946 &apss_axi_clk_src.clkr.hw }, 1947 .num_parents = 1, 1948 .flags = CLK_SET_RATE_PARENT, 1949 .ops = &clk_branch2_ops, 1950 }, 1951 }, 1952 }; 1953 1954 static struct clk_branch gcc_blsp1_ahb_clk = { 1955 .halt_reg = 0x01008, 1956 .halt_check = BRANCH_HALT_VOTED, 1957 .clkr = { 1958 .enable_reg = 0x0b004, 1959 .enable_mask = BIT(10), 1960 .hw.init = &(struct clk_init_data){ 1961 .name = "gcc_blsp1_ahb_clk", 1962 .parent_hws = (const struct clk_hw *[]){ 1963 &pcnoc_bfdcd_clk_src.clkr.hw }, 1964 .num_parents = 1, 1965 .flags = CLK_SET_RATE_PARENT, 1966 .ops = &clk_branch2_ops, 1967 }, 1968 }, 1969 }; 1970 1971 static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = { 1972 .halt_reg = 0x02008, 1973 .clkr = { 1974 .enable_reg = 0x02008, 1975 .enable_mask = BIT(0), 1976 .hw.init = &(struct clk_init_data){ 1977 .name = "gcc_blsp1_qup1_i2c_apps_clk", 1978 .parent_hws = (const struct clk_hw *[]){ 1979 &blsp1_qup1_i2c_apps_clk_src.clkr.hw }, 1980 .num_parents = 1, 1981 .flags = CLK_SET_RATE_PARENT, 1982 .ops = &clk_branch2_ops, 1983 }, 1984 }, 1985 }; 1986 1987 static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = { 1988 .halt_reg = 0x02004, 1989 .clkr = { 1990 .enable_reg = 0x02004, 1991 .enable_mask = BIT(0), 1992 .hw.init = &(struct clk_init_data){ 1993 .name = "gcc_blsp1_qup1_spi_apps_clk", 1994 .parent_hws = (const struct clk_hw *[]){ 1995 &blsp1_qup1_spi_apps_clk_src.clkr.hw }, 1996 .num_parents = 1, 1997 .flags = CLK_SET_RATE_PARENT, 1998 .ops = &clk_branch2_ops, 1999 }, 2000 }, 2001 }; 2002 2003 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = { 2004 .halt_reg = 0x03010, 2005 .clkr = { 2006 .enable_reg = 0x03010, 2007 .enable_mask = BIT(0), 2008 .hw.init = &(struct clk_init_data){ 2009 .name = "gcc_blsp1_qup2_i2c_apps_clk", 2010 .parent_hws = (const struct clk_hw *[]){ 2011 &blsp1_qup2_i2c_apps_clk_src.clkr.hw }, 2012 .num_parents = 1, 2013 .flags = CLK_SET_RATE_PARENT, 2014 .ops = &clk_branch2_ops, 2015 }, 2016 }, 2017 }; 2018 2019 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = { 2020 .halt_reg = 0x0300c, 2021 .clkr = { 2022 .enable_reg = 0x0300c, 2023 .enable_mask = BIT(0), 2024 .hw.init = &(struct clk_init_data){ 2025 .name = "gcc_blsp1_qup2_spi_apps_clk", 2026 .parent_hws = (const struct clk_hw *[]){ 2027 &blsp1_qup2_spi_apps_clk_src.clkr.hw }, 2028 .num_parents = 1, 2029 .flags = CLK_SET_RATE_PARENT, 2030 .ops = &clk_branch2_ops, 2031 }, 2032 }, 2033 }; 2034 2035 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = { 2036 .halt_reg = 0x04010, 2037 .clkr = { 2038 .enable_reg = 0x04010, 2039 .enable_mask = BIT(0), 2040 .hw.init = &(struct clk_init_data){ 2041 .name = "gcc_blsp1_qup3_i2c_apps_clk", 2042 .parent_hws = (const struct clk_hw *[]){ 2043 &blsp1_qup3_i2c_apps_clk_src.clkr.hw }, 2044 .num_parents = 1, 2045 .flags = CLK_SET_RATE_PARENT, 2046 .ops = &clk_branch2_ops, 2047 }, 2048 }, 2049 }; 2050 2051 static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = { 2052 .halt_reg = 0x0400c, 2053 .clkr = { 2054 .enable_reg = 0x0400c, 2055 .enable_mask = BIT(0), 2056 .hw.init = &(struct clk_init_data){ 2057 .name = "gcc_blsp1_qup3_spi_apps_clk", 2058 .parent_hws = (const struct clk_hw *[]){ 2059 &blsp1_qup3_spi_apps_clk_src.clkr.hw }, 2060 .num_parents = 1, 2061 .flags = CLK_SET_RATE_PARENT, 2062 .ops = &clk_branch2_ops, 2063 }, 2064 }, 2065 }; 2066 2067 static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = { 2068 .halt_reg = 0x05010, 2069 .clkr = { 2070 .enable_reg = 0x05010, 2071 .enable_mask = BIT(0), 2072 .hw.init = &(struct clk_init_data){ 2073 .name = "gcc_blsp1_qup4_i2c_apps_clk", 2074 .parent_hws = (const struct clk_hw *[]){ 2075 &blsp1_qup4_i2c_apps_clk_src.clkr.hw }, 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_blsp1_qup4_spi_apps_clk = { 2084 .halt_reg = 0x0500c, 2085 .clkr = { 2086 .enable_reg = 0x0500c, 2087 .enable_mask = BIT(0), 2088 .hw.init = &(struct clk_init_data){ 2089 .name = "gcc_blsp1_qup4_spi_apps_clk", 2090 .parent_hws = (const struct clk_hw *[]){ 2091 &blsp1_qup4_spi_apps_clk_src.clkr.hw }, 2092 .num_parents = 1, 2093 .flags = CLK_SET_RATE_PARENT, 2094 .ops = &clk_branch2_ops, 2095 }, 2096 }, 2097 }; 2098 2099 static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = { 2100 .halt_reg = 0x06010, 2101 .clkr = { 2102 .enable_reg = 0x06010, 2103 .enable_mask = BIT(0), 2104 .hw.init = &(struct clk_init_data){ 2105 .name = "gcc_blsp1_qup5_i2c_apps_clk", 2106 .parent_hws = (const struct clk_hw *[]){ 2107 &blsp1_qup5_i2c_apps_clk_src.clkr.hw }, 2108 .num_parents = 1, 2109 .flags = CLK_SET_RATE_PARENT, 2110 .ops = &clk_branch2_ops, 2111 }, 2112 }, 2113 }; 2114 2115 static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = { 2116 .halt_reg = 0x0600c, 2117 .clkr = { 2118 .enable_reg = 0x0600c, 2119 .enable_mask = BIT(0), 2120 .hw.init = &(struct clk_init_data){ 2121 .name = "gcc_blsp1_qup5_spi_apps_clk", 2122 .parent_hws = (const struct clk_hw *[]){ 2123 &blsp1_qup5_spi_apps_clk_src.clkr.hw }, 2124 .num_parents = 1, 2125 .flags = CLK_SET_RATE_PARENT, 2126 .ops = &clk_branch2_ops, 2127 }, 2128 }, 2129 }; 2130 2131 static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = { 2132 .halt_reg = 0x0700c, 2133 .clkr = { 2134 .enable_reg = 0x0700c, 2135 .enable_mask = BIT(0), 2136 .hw.init = &(struct clk_init_data){ 2137 .name = "gcc_blsp1_qup6_spi_apps_clk", 2138 .parent_hws = (const struct clk_hw *[]){ 2139 &blsp1_qup6_spi_apps_clk_src.clkr.hw }, 2140 .num_parents = 1, 2141 .flags = CLK_SET_RATE_PARENT, 2142 .ops = &clk_branch2_ops, 2143 }, 2144 }, 2145 }; 2146 2147 static struct clk_branch gcc_blsp1_uart1_apps_clk = { 2148 .halt_reg = 0x0203c, 2149 .clkr = { 2150 .enable_reg = 0x0203c, 2151 .enable_mask = BIT(0), 2152 .hw.init = &(struct clk_init_data){ 2153 .name = "gcc_blsp1_uart1_apps_clk", 2154 .parent_hws = (const struct clk_hw *[]){ 2155 &blsp1_uart1_apps_clk_src.clkr.hw }, 2156 .num_parents = 1, 2157 .flags = CLK_SET_RATE_PARENT, 2158 .ops = &clk_branch2_ops, 2159 }, 2160 }, 2161 }; 2162 2163 static struct clk_branch gcc_blsp1_uart2_apps_clk = { 2164 .halt_reg = 0x0302c, 2165 .clkr = { 2166 .enable_reg = 0x0302c, 2167 .enable_mask = BIT(0), 2168 .hw.init = &(struct clk_init_data){ 2169 .name = "gcc_blsp1_uart2_apps_clk", 2170 .parent_hws = (const struct clk_hw *[]){ 2171 &blsp1_uart2_apps_clk_src.clkr.hw }, 2172 .num_parents = 1, 2173 .flags = CLK_SET_RATE_PARENT, 2174 .ops = &clk_branch2_ops, 2175 }, 2176 }, 2177 }; 2178 2179 static struct clk_branch gcc_blsp1_uart3_apps_clk = { 2180 .halt_reg = 0x0402c, 2181 .clkr = { 2182 .enable_reg = 0x0402c, 2183 .enable_mask = BIT(0), 2184 .hw.init = &(struct clk_init_data){ 2185 .name = "gcc_blsp1_uart3_apps_clk", 2186 .parent_hws = (const struct clk_hw *[]){ 2187 &blsp1_uart3_apps_clk_src.clkr.hw }, 2188 .num_parents = 1, 2189 .flags = CLK_SET_RATE_PARENT, 2190 .ops = &clk_branch2_ops, 2191 }, 2192 }, 2193 }; 2194 2195 static struct clk_branch gcc_blsp1_uart4_apps_clk = { 2196 .halt_reg = 0x0502c, 2197 .clkr = { 2198 .enable_reg = 0x0502c, 2199 .enable_mask = BIT(0), 2200 .hw.init = &(struct clk_init_data){ 2201 .name = "gcc_blsp1_uart4_apps_clk", 2202 .parent_hws = (const struct clk_hw *[]){ 2203 &blsp1_uart4_apps_clk_src.clkr.hw }, 2204 .num_parents = 1, 2205 .flags = CLK_SET_RATE_PARENT, 2206 .ops = &clk_branch2_ops, 2207 }, 2208 }, 2209 }; 2210 2211 static struct clk_branch gcc_blsp1_uart5_apps_clk = { 2212 .halt_reg = 0x0602c, 2213 .clkr = { 2214 .enable_reg = 0x0602c, 2215 .enable_mask = BIT(0), 2216 .hw.init = &(struct clk_init_data){ 2217 .name = "gcc_blsp1_uart5_apps_clk", 2218 .parent_hws = (const struct clk_hw *[]){ 2219 &blsp1_uart5_apps_clk_src.clkr.hw }, 2220 .num_parents = 1, 2221 .flags = CLK_SET_RATE_PARENT, 2222 .ops = &clk_branch2_ops, 2223 }, 2224 }, 2225 }; 2226 2227 static struct clk_branch gcc_blsp1_uart6_apps_clk = { 2228 .halt_reg = 0x0702c, 2229 .clkr = { 2230 .enable_reg = 0x0702c, 2231 .enable_mask = BIT(0), 2232 .hw.init = &(struct clk_init_data){ 2233 .name = "gcc_blsp1_uart6_apps_clk", 2234 .parent_hws = (const struct clk_hw *[]){ 2235 &blsp1_uart6_apps_clk_src.clkr.hw }, 2236 .num_parents = 1, 2237 .flags = CLK_SET_RATE_PARENT, 2238 .ops = &clk_branch2_ops, 2239 }, 2240 }, 2241 }; 2242 2243 static struct clk_branch gcc_crypto_ahb_clk = { 2244 .halt_reg = 0x16024, 2245 .halt_check = BRANCH_HALT_VOTED, 2246 .clkr = { 2247 .enable_reg = 0x0b004, 2248 .enable_mask = BIT(0), 2249 .hw.init = &(struct clk_init_data){ 2250 .name = "gcc_crypto_ahb_clk", 2251 .parent_hws = (const struct clk_hw *[]){ 2252 &pcnoc_bfdcd_clk_src.clkr.hw }, 2253 .num_parents = 1, 2254 .flags = CLK_SET_RATE_PARENT, 2255 .ops = &clk_branch2_ops, 2256 }, 2257 }, 2258 }; 2259 2260 static struct clk_branch gcc_crypto_axi_clk = { 2261 .halt_reg = 0x16020, 2262 .halt_check = BRANCH_HALT_VOTED, 2263 .clkr = { 2264 .enable_reg = 0x0b004, 2265 .enable_mask = BIT(1), 2266 .hw.init = &(struct clk_init_data){ 2267 .name = "gcc_crypto_axi_clk", 2268 .parent_hws = (const struct clk_hw *[]){ 2269 &pcnoc_bfdcd_clk_src.clkr.hw }, 2270 .num_parents = 1, 2271 .flags = CLK_SET_RATE_PARENT, 2272 .ops = &clk_branch2_ops, 2273 }, 2274 }, 2275 }; 2276 2277 static struct clk_branch gcc_crypto_clk = { 2278 .halt_reg = 0x1601c, 2279 .halt_check = BRANCH_HALT_VOTED, 2280 .clkr = { 2281 .enable_reg = 0x0b004, 2282 .enable_mask = BIT(2), 2283 .hw.init = &(struct clk_init_data){ 2284 .name = "gcc_crypto_clk", 2285 .parent_hws = (const struct clk_hw *[]){ 2286 &crypto_clk_src.clkr.hw }, 2287 .num_parents = 1, 2288 .flags = CLK_SET_RATE_PARENT, 2289 .ops = &clk_branch2_ops, 2290 }, 2291 }, 2292 }; 2293 2294 static struct clk_fixed_factor gpll6_out_main_div2 = { 2295 .mult = 1, 2296 .div = 2, 2297 .hw.init = &(struct clk_init_data){ 2298 .name = "gpll6_out_main_div2", 2299 .parent_hws = (const struct clk_hw *[]){ 2300 &gpll6_main.clkr.hw }, 2301 .num_parents = 1, 2302 .ops = &clk_fixed_factor_ops, 2303 .flags = CLK_SET_RATE_PARENT, 2304 }, 2305 }; 2306 2307 static struct clk_branch gcc_xo_clk = { 2308 .halt_reg = 0x30030, 2309 .clkr = { 2310 .enable_reg = 0x30030, 2311 .enable_mask = BIT(0), 2312 .hw.init = &(struct clk_init_data){ 2313 .name = "gcc_xo_clk", 2314 .parent_hws = (const struct clk_hw *[]){ 2315 &gcc_xo_clk_src.clkr.hw }, 2316 .num_parents = 1, 2317 .flags = CLK_SET_RATE_PARENT, 2318 .ops = &clk_branch2_ops, 2319 }, 2320 }, 2321 }; 2322 2323 static struct clk_branch gcc_gp1_clk = { 2324 .halt_reg = 0x08000, 2325 .clkr = { 2326 .enable_reg = 0x08000, 2327 .enable_mask = BIT(0), 2328 .hw.init = &(struct clk_init_data){ 2329 .name = "gcc_gp1_clk", 2330 .parent_hws = (const struct clk_hw *[]){ 2331 &gp1_clk_src.clkr.hw }, 2332 .num_parents = 1, 2333 .flags = CLK_SET_RATE_PARENT, 2334 .ops = &clk_branch2_ops, 2335 }, 2336 }, 2337 }; 2338 2339 static struct clk_branch gcc_gp2_clk = { 2340 .halt_reg = 0x09000, 2341 .clkr = { 2342 .enable_reg = 0x09000, 2343 .enable_mask = BIT(0), 2344 .hw.init = &(struct clk_init_data){ 2345 .name = "gcc_gp2_clk", 2346 .parent_hws = (const struct clk_hw *[]){ 2347 &gp2_clk_src.clkr.hw }, 2348 .num_parents = 1, 2349 .flags = CLK_SET_RATE_PARENT, 2350 .ops = &clk_branch2_ops, 2351 }, 2352 }, 2353 }; 2354 2355 static struct clk_branch gcc_gp3_clk = { 2356 .halt_reg = 0x0a000, 2357 .clkr = { 2358 .enable_reg = 0x0a000, 2359 .enable_mask = BIT(0), 2360 .hw.init = &(struct clk_init_data){ 2361 .name = "gcc_gp3_clk", 2362 .parent_hws = (const struct clk_hw *[]){ 2363 &gp3_clk_src.clkr.hw }, 2364 .num_parents = 1, 2365 .flags = CLK_SET_RATE_PARENT, 2366 .ops = &clk_branch2_ops, 2367 }, 2368 }, 2369 }; 2370 2371 static struct clk_branch gcc_mdio_ahb_clk = { 2372 .halt_reg = 0x58004, 2373 .clkr = { 2374 .enable_reg = 0x58004, 2375 .enable_mask = BIT(0), 2376 .hw.init = &(struct clk_init_data){ 2377 .name = "gcc_mdio_ahb_clk", 2378 .parent_hws = (const struct clk_hw *[]){ 2379 &pcnoc_bfdcd_clk_src.clkr.hw }, 2380 .num_parents = 1, 2381 .flags = CLK_SET_RATE_PARENT, 2382 .ops = &clk_branch2_ops, 2383 }, 2384 }, 2385 }; 2386 2387 static struct clk_branch gcc_crypto_ppe_clk = { 2388 .halt_reg = 0x68310, 2389 .clkr = { 2390 .enable_reg = 0x68310, 2391 .enable_mask = BIT(0), 2392 .hw.init = &(struct clk_init_data){ 2393 .name = "gcc_crypto_ppe_clk", 2394 .parent_hws = (const struct clk_hw *[]){ 2395 &nss_ppe_clk_src.clkr.hw }, 2396 .num_parents = 1, 2397 .flags = CLK_SET_RATE_PARENT, 2398 .ops = &clk_branch2_ops, 2399 }, 2400 }, 2401 }; 2402 2403 static struct clk_branch gcc_nss_ce_apb_clk = { 2404 .halt_reg = 0x68174, 2405 .clkr = { 2406 .enable_reg = 0x68174, 2407 .enable_mask = BIT(0), 2408 .hw.init = &(struct clk_init_data){ 2409 .name = "gcc_nss_ce_apb_clk", 2410 .parent_hws = (const struct clk_hw *[]){ 2411 &nss_ce_clk_src.clkr.hw }, 2412 .num_parents = 1, 2413 .flags = CLK_SET_RATE_PARENT, 2414 .ops = &clk_branch2_ops, 2415 }, 2416 }, 2417 }; 2418 2419 static struct clk_branch gcc_nss_ce_axi_clk = { 2420 .halt_reg = 0x68170, 2421 .clkr = { 2422 .enable_reg = 0x68170, 2423 .enable_mask = BIT(0), 2424 .hw.init = &(struct clk_init_data){ 2425 .name = "gcc_nss_ce_axi_clk", 2426 .parent_hws = (const struct clk_hw *[]){ 2427 &nss_ce_clk_src.clkr.hw }, 2428 .num_parents = 1, 2429 .flags = CLK_SET_RATE_PARENT, 2430 .ops = &clk_branch2_ops, 2431 }, 2432 }, 2433 }; 2434 2435 static struct clk_branch gcc_nss_cfg_clk = { 2436 .halt_reg = 0x68160, 2437 .clkr = { 2438 .enable_reg = 0x68160, 2439 .enable_mask = BIT(0), 2440 .hw.init = &(struct clk_init_data){ 2441 .name = "gcc_nss_cfg_clk", 2442 .parent_hws = (const struct clk_hw *[]){ 2443 &pcnoc_bfdcd_clk_src.clkr.hw }, 2444 .num_parents = 1, 2445 .flags = CLK_SET_RATE_PARENT, 2446 .ops = &clk_branch2_ops, 2447 }, 2448 }, 2449 }; 2450 2451 static struct clk_branch gcc_nss_crypto_clk = { 2452 .halt_reg = 0x68164, 2453 .clkr = { 2454 .enable_reg = 0x68164, 2455 .enable_mask = BIT(0), 2456 .hw.init = &(struct clk_init_data){ 2457 .name = "gcc_nss_crypto_clk", 2458 .parent_hws = (const struct clk_hw *[]){ 2459 &nss_crypto_clk_src.clkr.hw }, 2460 .num_parents = 1, 2461 .flags = CLK_SET_RATE_PARENT, 2462 .ops = &clk_branch2_ops, 2463 }, 2464 }, 2465 }; 2466 2467 static struct clk_branch gcc_nss_csr_clk = { 2468 .halt_reg = 0x68318, 2469 .clkr = { 2470 .enable_reg = 0x68318, 2471 .enable_mask = BIT(0), 2472 .hw.init = &(struct clk_init_data){ 2473 .name = "gcc_nss_csr_clk", 2474 .parent_hws = (const struct clk_hw *[]){ 2475 &nss_ce_clk_src.clkr.hw }, 2476 .num_parents = 1, 2477 .flags = CLK_SET_RATE_PARENT, 2478 .ops = &clk_branch2_ops, 2479 }, 2480 }, 2481 }; 2482 2483 static struct clk_branch gcc_nss_edma_cfg_clk = { 2484 .halt_reg = 0x6819C, 2485 .clkr = { 2486 .enable_reg = 0x6819C, 2487 .enable_mask = BIT(0), 2488 .hw.init = &(struct clk_init_data){ 2489 .name = "gcc_nss_edma_cfg_clk", 2490 .parent_hws = (const struct clk_hw *[]){ 2491 &nss_ppe_clk_src.clkr.hw }, 2492 .num_parents = 1, 2493 .flags = CLK_SET_RATE_PARENT, 2494 .ops = &clk_branch2_ops, 2495 }, 2496 }, 2497 }; 2498 2499 static struct clk_branch gcc_nss_edma_clk = { 2500 .halt_reg = 0x68198, 2501 .clkr = { 2502 .enable_reg = 0x68198, 2503 .enable_mask = BIT(0), 2504 .hw.init = &(struct clk_init_data){ 2505 .name = "gcc_nss_edma_clk", 2506 .parent_hws = (const struct clk_hw *[]){ 2507 &nss_ppe_clk_src.clkr.hw }, 2508 .num_parents = 1, 2509 .flags = CLK_SET_RATE_PARENT, 2510 .ops = &clk_branch2_ops, 2511 }, 2512 }, 2513 }; 2514 2515 static struct clk_branch gcc_nss_noc_clk = { 2516 .halt_reg = 0x68168, 2517 .clkr = { 2518 .enable_reg = 0x68168, 2519 .enable_mask = BIT(0), 2520 .hw.init = &(struct clk_init_data){ 2521 .name = "gcc_nss_noc_clk", 2522 .parent_hws = (const struct clk_hw *[]){ 2523 &snoc_nssnoc_bfdcd_clk_src.clkr.hw }, 2524 .num_parents = 1, 2525 .flags = CLK_SET_RATE_PARENT, 2526 .ops = &clk_branch2_ops, 2527 }, 2528 }, 2529 }; 2530 2531 static struct clk_branch gcc_ubi0_utcm_clk = { 2532 .halt_reg = 0x2606c, 2533 .clkr = { 2534 .enable_reg = 0x2606c, 2535 .enable_mask = BIT(0), 2536 .hw.init = &(struct clk_init_data){ 2537 .name = "gcc_ubi0_utcm_clk", 2538 .parent_hws = (const struct clk_hw *[]){ 2539 &snoc_nssnoc_bfdcd_clk_src.clkr.hw }, 2540 .num_parents = 1, 2541 .flags = CLK_SET_RATE_PARENT, 2542 .ops = &clk_branch2_ops, 2543 }, 2544 }, 2545 }; 2546 2547 static struct clk_branch gcc_snoc_nssnoc_clk = { 2548 .halt_reg = 0x26070, 2549 .clkr = { 2550 .enable_reg = 0x26070, 2551 .enable_mask = BIT(0), 2552 .hw.init = &(struct clk_init_data){ 2553 .name = "gcc_snoc_nssnoc_clk", 2554 .parent_hws = (const struct clk_hw *[]){ 2555 &snoc_nssnoc_bfdcd_clk_src.clkr.hw }, 2556 .num_parents = 1, 2557 .flags = CLK_SET_RATE_PARENT, 2558 .ops = &clk_branch2_ops, 2559 }, 2560 }, 2561 }; 2562 2563 static const struct freq_tbl ftbl_wcss_ahb_clk_src[] = { 2564 F(24000000, P_XO, 1, 0, 0), 2565 F(133333333, P_GPLL0, 6, 0, 0), 2566 { } 2567 }; 2568 2569 static const struct freq_tbl ftbl_q6_axi_clk_src[] = { 2570 F(24000000, P_XO, 1, 0, 0), 2571 F(400000000, P_GPLL0, 2, 0, 0), 2572 { } 2573 }; 2574 2575 static struct clk_rcg2 wcss_ahb_clk_src = { 2576 .cmd_rcgr = 0x59020, 2577 .freq_tbl = ftbl_wcss_ahb_clk_src, 2578 .hid_width = 5, 2579 .parent_map = gcc_xo_gpll0_map, 2580 .clkr.hw.init = &(struct clk_init_data){ 2581 .name = "wcss_ahb_clk_src", 2582 .parent_data = gcc_xo_gpll0, 2583 .num_parents = 2, 2584 .ops = &clk_rcg2_ops, 2585 }, 2586 }; 2587 2588 static const struct clk_parent_data gcc_xo_gpll0_gpll2_gpll4_gpll6[] = { 2589 { .fw_name = "xo" }, 2590 { .hw = &gpll0.clkr.hw }, 2591 { .hw = &gpll2.clkr.hw }, 2592 { .hw = &gpll4.clkr.hw }, 2593 { .hw = &gpll6.clkr.hw }, 2594 }; 2595 2596 static const struct parent_map gcc_xo_gpll0_gpll2_gpll4_gpll6_map[] = { 2597 { P_XO, 0 }, 2598 { P_GPLL0, 1 }, 2599 { P_GPLL2, 2 }, 2600 { P_GPLL4, 3 }, 2601 { P_GPLL6, 4 }, 2602 }; 2603 2604 static struct clk_rcg2 q6_axi_clk_src = { 2605 .cmd_rcgr = 0x59120, 2606 .freq_tbl = ftbl_q6_axi_clk_src, 2607 .hid_width = 5, 2608 .parent_map = gcc_xo_gpll0_gpll2_gpll4_gpll6_map, 2609 .clkr.hw.init = &(struct clk_init_data){ 2610 .name = "q6_axi_clk_src", 2611 .parent_data = gcc_xo_gpll0_gpll2_gpll4_gpll6, 2612 .num_parents = 5, 2613 .ops = &clk_rcg2_ops, 2614 }, 2615 }; 2616 2617 static const struct freq_tbl ftbl_lpass_core_axim_clk_src[] = { 2618 F(24000000, P_XO, 1, 0, 0), 2619 F(100000000, P_GPLL0, 8, 0, 0), 2620 { } 2621 }; 2622 2623 static struct clk_rcg2 lpass_core_axim_clk_src = { 2624 .cmd_rcgr = 0x1F020, 2625 .freq_tbl = ftbl_lpass_core_axim_clk_src, 2626 .hid_width = 5, 2627 .parent_map = gcc_xo_gpll0_map, 2628 .clkr.hw.init = &(struct clk_init_data){ 2629 .name = "lpass_core_axim_clk_src", 2630 .parent_data = gcc_xo_gpll0, 2631 .num_parents = 2, 2632 .ops = &clk_rcg2_ops, 2633 }, 2634 }; 2635 2636 static const struct freq_tbl ftbl_lpass_snoc_cfg_clk_src[] = { 2637 F(24000000, P_XO, 1, 0, 0), 2638 F(266666667, P_GPLL0, 3, 0, 0), 2639 { } 2640 }; 2641 2642 static struct clk_rcg2 lpass_snoc_cfg_clk_src = { 2643 .cmd_rcgr = 0x1F040, 2644 .freq_tbl = ftbl_lpass_snoc_cfg_clk_src, 2645 .hid_width = 5, 2646 .parent_map = gcc_xo_gpll0_map, 2647 .clkr.hw.init = &(struct clk_init_data){ 2648 .name = "lpass_snoc_cfg_clk_src", 2649 .parent_data = gcc_xo_gpll0, 2650 .num_parents = 2, 2651 .ops = &clk_rcg2_ops, 2652 }, 2653 }; 2654 2655 static const struct freq_tbl ftbl_lpass_q6_axim_clk_src[] = { 2656 F(24000000, P_XO, 1, 0, 0), 2657 F(400000000, P_GPLL0, 2, 0, 0), 2658 { } 2659 }; 2660 2661 static struct clk_rcg2 lpass_q6_axim_clk_src = { 2662 .cmd_rcgr = 0x1F008, 2663 .freq_tbl = ftbl_lpass_q6_axim_clk_src, 2664 .hid_width = 5, 2665 .parent_map = gcc_xo_gpll0_map, 2666 .clkr.hw.init = &(struct clk_init_data){ 2667 .name = "lpass_q6_axim_clk_src", 2668 .parent_data = gcc_xo_gpll0, 2669 .num_parents = 2, 2670 .ops = &clk_rcg2_ops, 2671 }, 2672 }; 2673 2674 static struct freq_tbl ftbl_rbcpr_wcss_clk_src[] = { 2675 F(24000000, P_XO, 1, 0, 0), 2676 F(50000000, P_GPLL0, 16, 0, 0), 2677 { } 2678 }; 2679 2680 static struct clk_rcg2 rbcpr_wcss_clk_src = { 2681 .cmd_rcgr = 0x3a00c, 2682 .freq_tbl = ftbl_rbcpr_wcss_clk_src, 2683 .hid_width = 5, 2684 .parent_map = gcc_xo_gpll0_out_main_div2_gpll0_map, 2685 .clkr.hw.init = &(struct clk_init_data){ 2686 .name = "rbcpr_wcss_clk_src", 2687 .parent_data = gcc_xo_gpll0_out_main_div2_gpll0, 2688 .num_parents = 3, 2689 .ops = &clk_rcg2_ops, 2690 }, 2691 }; 2692 2693 static struct clk_branch gcc_lpass_core_axim_clk = { 2694 .halt_reg = 0x1F028, 2695 .clkr = { 2696 .enable_reg = 0x1F028, 2697 .enable_mask = BIT(0), 2698 .hw.init = &(struct clk_init_data){ 2699 .name = "gcc_lpass_core_axim_clk", 2700 .parent_hws = (const struct clk_hw *[]){ 2701 &lpass_core_axim_clk_src.clkr.hw }, 2702 .num_parents = 1, 2703 .flags = CLK_SET_RATE_PARENT, 2704 .ops = &clk_branch2_ops, 2705 }, 2706 }, 2707 }; 2708 2709 static struct clk_branch gcc_lpass_snoc_cfg_clk = { 2710 .halt_reg = 0x1F048, 2711 .clkr = { 2712 .enable_reg = 0x1F048, 2713 .enable_mask = BIT(0), 2714 .hw.init = &(struct clk_init_data){ 2715 .name = "gcc_lpass_snoc_cfg_clk", 2716 .parent_hws = (const struct clk_hw *[]){ 2717 &lpass_snoc_cfg_clk_src.clkr.hw }, 2718 .num_parents = 1, 2719 .flags = CLK_SET_RATE_PARENT, 2720 .ops = &clk_branch2_ops, 2721 }, 2722 }, 2723 }; 2724 2725 static struct clk_branch gcc_lpass_q6_axim_clk = { 2726 .halt_reg = 0x1F010, 2727 .clkr = { 2728 .enable_reg = 0x1F010, 2729 .enable_mask = BIT(0), 2730 .hw.init = &(struct clk_init_data){ 2731 .name = "gcc_lpass_q6_axim_clk", 2732 .parent_hws = (const struct clk_hw *[]){ 2733 &lpass_q6_axim_clk_src.clkr.hw }, 2734 .num_parents = 1, 2735 .flags = CLK_SET_RATE_PARENT, 2736 .ops = &clk_branch2_ops, 2737 }, 2738 }, 2739 }; 2740 2741 static struct clk_branch gcc_lpass_q6_atbm_at_clk = { 2742 .halt_reg = 0x1F018, 2743 .clkr = { 2744 .enable_reg = 0x1F018, 2745 .enable_mask = BIT(0), 2746 .hw.init = &(struct clk_init_data){ 2747 .name = "gcc_lpass_q6_atbm_at_clk", 2748 .parent_hws = (const struct clk_hw *[]){ 2749 &qdss_at_clk_src.clkr.hw }, 2750 .num_parents = 1, 2751 .flags = CLK_SET_RATE_PARENT, 2752 .ops = &clk_branch2_ops, 2753 }, 2754 }, 2755 }; 2756 2757 static struct clk_branch gcc_lpass_q6_pclkdbg_clk = { 2758 .halt_reg = 0x1F01C, 2759 .clkr = { 2760 .enable_reg = 0x1F01C, 2761 .enable_mask = BIT(0), 2762 .hw.init = &(struct clk_init_data){ 2763 .name = "gcc_lpass_q6_pclkdbg_clk", 2764 .parent_hws = (const struct clk_hw *[]){ 2765 &qdss_dap_sync_clk_src.hw }, 2766 .num_parents = 1, 2767 .flags = CLK_SET_RATE_PARENT, 2768 .ops = &clk_branch2_ops, 2769 }, 2770 }, 2771 }; 2772 2773 static struct clk_branch gcc_lpass_q6ss_tsctr_1to2_clk = { 2774 .halt_reg = 0x1F014, 2775 .clkr = { 2776 .enable_reg = 0x1F014, 2777 .enable_mask = BIT(0), 2778 .hw.init = &(struct clk_init_data){ 2779 .name = "gcc_lpass_q6ss_tsctr_1to2_clk", 2780 .parent_hws = (const struct clk_hw *[]){ 2781 &qdss_tsctr_div2_clk_src.hw }, 2782 .num_parents = 1, 2783 .flags = CLK_SET_RATE_PARENT, 2784 .ops = &clk_branch2_ops, 2785 }, 2786 }, 2787 }; 2788 2789 static struct clk_branch gcc_lpass_q6ss_trig_clk = { 2790 .halt_reg = 0x1F038, 2791 .clkr = { 2792 .enable_reg = 0x1F038, 2793 .enable_mask = BIT(0), 2794 .hw.init = &(struct clk_init_data){ 2795 .name = "gcc_lpass_q6ss_trig_clk", 2796 .parent_hws = (const struct clk_hw *[]){ 2797 &qdss_dap_sync_clk_src.hw }, 2798 .num_parents = 1, 2799 .flags = CLK_SET_RATE_PARENT, 2800 .ops = &clk_branch2_ops, 2801 }, 2802 }, 2803 }; 2804 2805 static struct clk_branch gcc_lpass_tbu_clk = { 2806 .halt_reg = 0x12094, 2807 .clkr = { 2808 .enable_reg = 0xb00c, 2809 .enable_mask = BIT(10), 2810 .hw.init = &(struct clk_init_data){ 2811 .name = "gcc_lpass_tbu_clk", 2812 .parent_hws = (const struct clk_hw *[]){ 2813 &lpass_q6_axim_clk_src.clkr.hw }, 2814 .num_parents = 1, 2815 .flags = CLK_SET_RATE_PARENT, 2816 .ops = &clk_branch2_ops, 2817 }, 2818 }, 2819 }; 2820 2821 static struct clk_branch gcc_pcnoc_lpass_clk = { 2822 .halt_reg = 0x27020, 2823 .clkr = { 2824 .enable_reg = 0x27020, 2825 .enable_mask = BIT(0), 2826 .hw.init = &(struct clk_init_data){ 2827 .name = "gcc_pcnoc_lpass_clk", 2828 .parent_hws = (const struct clk_hw *[]){ 2829 &lpass_core_axim_clk_src.clkr.hw }, 2830 .num_parents = 1, 2831 .flags = CLK_SET_RATE_PARENT, 2832 .ops = &clk_branch2_ops, 2833 }, 2834 }, 2835 }; 2836 2837 static struct clk_branch gcc_mem_noc_lpass_clk = { 2838 .halt_reg = 0x1D044, 2839 .clkr = { 2840 .enable_reg = 0x1D044, 2841 .enable_mask = BIT(0), 2842 .hw.init = &(struct clk_init_data){ 2843 .name = "gcc_mem_noc_lpass_clk", 2844 .parent_hws = (const struct clk_hw *[]){ 2845 &lpass_q6_axim_clk_src.clkr.hw }, 2846 .num_parents = 1, 2847 .flags = CLK_SET_RATE_PARENT, 2848 .ops = &clk_branch2_ops, 2849 }, 2850 }, 2851 }; 2852 2853 static struct clk_branch gcc_snoc_lpass_cfg_clk = { 2854 .halt_reg = 0x26074, 2855 .clkr = { 2856 .enable_reg = 0x26074, 2857 .enable_mask = BIT(0), 2858 .hw.init = &(struct clk_init_data){ 2859 .name = "gcc_snoc_lpass_cfg_clk", 2860 .parent_hws = (const struct clk_hw *[]){ 2861 &lpass_snoc_cfg_clk_src.clkr.hw }, 2862 .num_parents = 1, 2863 .flags = CLK_SET_RATE_PARENT, 2864 .ops = &clk_branch2_ops, 2865 }, 2866 }, 2867 }; 2868 2869 static struct clk_branch gcc_mem_noc_ubi32_clk = { 2870 .halt_reg = 0x1D03C, 2871 .clkr = { 2872 .enable_reg = 0x1D03C, 2873 .enable_mask = BIT(0), 2874 .hw.init = &(struct clk_init_data){ 2875 .name = "gcc_mem_noc_ubi32_clk", 2876 .parent_hws = (const struct clk_hw *[]){ 2877 &ubi32_mem_noc_bfdcd_clk_src.clkr.hw }, 2878 .num_parents = 1, 2879 .flags = CLK_SET_RATE_PARENT, 2880 .ops = &clk_branch2_ops, 2881 }, 2882 }, 2883 }; 2884 2885 static struct clk_branch gcc_nss_port1_rx_clk = { 2886 .halt_reg = 0x68240, 2887 .clkr = { 2888 .enable_reg = 0x68240, 2889 .enable_mask = BIT(0), 2890 .hw.init = &(struct clk_init_data){ 2891 .name = "gcc_nss_port1_rx_clk", 2892 .parent_hws = (const struct clk_hw *[]){ 2893 &nss_port1_rx_div_clk_src.clkr.hw }, 2894 .num_parents = 1, 2895 .flags = CLK_SET_RATE_PARENT, 2896 .ops = &clk_branch2_ops, 2897 }, 2898 }, 2899 }; 2900 2901 static struct clk_branch gcc_nss_port1_tx_clk = { 2902 .halt_reg = 0x68244, 2903 .clkr = { 2904 .enable_reg = 0x68244, 2905 .enable_mask = BIT(0), 2906 .hw.init = &(struct clk_init_data){ 2907 .name = "gcc_nss_port1_tx_clk", 2908 .parent_hws = (const struct clk_hw *[]){ 2909 &nss_port1_tx_div_clk_src.clkr.hw }, 2910 .num_parents = 1, 2911 .flags = CLK_SET_RATE_PARENT, 2912 .ops = &clk_branch2_ops, 2913 }, 2914 }, 2915 }; 2916 2917 static struct clk_branch gcc_nss_port2_rx_clk = { 2918 .halt_reg = 0x68248, 2919 .clkr = { 2920 .enable_reg = 0x68248, 2921 .enable_mask = BIT(0), 2922 .hw.init = &(struct clk_init_data){ 2923 .name = "gcc_nss_port2_rx_clk", 2924 .parent_hws = (const struct clk_hw *[]){ 2925 &nss_port2_rx_div_clk_src.clkr.hw }, 2926 .num_parents = 1, 2927 .flags = CLK_SET_RATE_PARENT, 2928 .ops = &clk_branch2_ops, 2929 }, 2930 }, 2931 }; 2932 2933 static struct clk_branch gcc_nss_port2_tx_clk = { 2934 .halt_reg = 0x6824c, 2935 .clkr = { 2936 .enable_reg = 0x6824c, 2937 .enable_mask = BIT(0), 2938 .hw.init = &(struct clk_init_data){ 2939 .name = "gcc_nss_port2_tx_clk", 2940 .parent_hws = (const struct clk_hw *[]){ 2941 &nss_port2_tx_div_clk_src.clkr.hw }, 2942 .num_parents = 1, 2943 .flags = CLK_SET_RATE_PARENT, 2944 .ops = &clk_branch2_ops, 2945 }, 2946 }, 2947 }; 2948 2949 static struct clk_branch gcc_nss_port3_rx_clk = { 2950 .halt_reg = 0x68250, 2951 .clkr = { 2952 .enable_reg = 0x68250, 2953 .enable_mask = BIT(0), 2954 .hw.init = &(struct clk_init_data){ 2955 .name = "gcc_nss_port3_rx_clk", 2956 .parent_hws = (const struct clk_hw *[]){ 2957 &nss_port3_rx_div_clk_src.clkr.hw }, 2958 .num_parents = 1, 2959 .flags = CLK_SET_RATE_PARENT, 2960 .ops = &clk_branch2_ops, 2961 }, 2962 }, 2963 }; 2964 2965 static struct clk_branch gcc_nss_port3_tx_clk = { 2966 .halt_reg = 0x68254, 2967 .clkr = { 2968 .enable_reg = 0x68254, 2969 .enable_mask = BIT(0), 2970 .hw.init = &(struct clk_init_data){ 2971 .name = "gcc_nss_port3_tx_clk", 2972 .parent_hws = (const struct clk_hw *[]){ 2973 &nss_port3_tx_div_clk_src.clkr.hw }, 2974 .num_parents = 1, 2975 .flags = CLK_SET_RATE_PARENT, 2976 .ops = &clk_branch2_ops, 2977 }, 2978 }, 2979 }; 2980 2981 static struct clk_branch gcc_nss_port4_rx_clk = { 2982 .halt_reg = 0x68258, 2983 .clkr = { 2984 .enable_reg = 0x68258, 2985 .enable_mask = BIT(0), 2986 .hw.init = &(struct clk_init_data){ 2987 .name = "gcc_nss_port4_rx_clk", 2988 .parent_hws = (const struct clk_hw *[]){ 2989 &nss_port4_rx_div_clk_src.clkr.hw }, 2990 .num_parents = 1, 2991 .flags = CLK_SET_RATE_PARENT, 2992 .ops = &clk_branch2_ops, 2993 }, 2994 }, 2995 }; 2996 2997 static struct clk_branch gcc_nss_port4_tx_clk = { 2998 .halt_reg = 0x6825c, 2999 .clkr = { 3000 .enable_reg = 0x6825c, 3001 .enable_mask = BIT(0), 3002 .hw.init = &(struct clk_init_data){ 3003 .name = "gcc_nss_port4_tx_clk", 3004 .parent_hws = (const struct clk_hw *[]){ 3005 &nss_port4_tx_div_clk_src.clkr.hw }, 3006 .num_parents = 1, 3007 .flags = CLK_SET_RATE_PARENT, 3008 .ops = &clk_branch2_ops, 3009 }, 3010 }, 3011 }; 3012 3013 static struct clk_branch gcc_nss_port5_rx_clk = { 3014 .halt_reg = 0x68260, 3015 .clkr = { 3016 .enable_reg = 0x68260, 3017 .enable_mask = BIT(0), 3018 .hw.init = &(struct clk_init_data){ 3019 .name = "gcc_nss_port5_rx_clk", 3020 .parent_hws = (const struct clk_hw *[]){ 3021 &nss_port5_rx_div_clk_src.clkr.hw }, 3022 .num_parents = 1, 3023 .flags = CLK_SET_RATE_PARENT, 3024 .ops = &clk_branch2_ops, 3025 }, 3026 }, 3027 }; 3028 3029 static struct clk_branch gcc_nss_port5_tx_clk = { 3030 .halt_reg = 0x68264, 3031 .clkr = { 3032 .enable_reg = 0x68264, 3033 .enable_mask = BIT(0), 3034 .hw.init = &(struct clk_init_data){ 3035 .name = "gcc_nss_port5_tx_clk", 3036 .parent_hws = (const struct clk_hw *[]){ 3037 &nss_port5_tx_div_clk_src.clkr.hw }, 3038 .num_parents = 1, 3039 .flags = CLK_SET_RATE_PARENT, 3040 .ops = &clk_branch2_ops, 3041 }, 3042 }, 3043 }; 3044 3045 static struct clk_branch gcc_nss_ppe_cfg_clk = { 3046 .halt_reg = 0x68194, 3047 .clkr = { 3048 .enable_reg = 0x68194, 3049 .enable_mask = BIT(0), 3050 .hw.init = &(struct clk_init_data){ 3051 .name = "gcc_nss_ppe_cfg_clk", 3052 .parent_hws = (const struct clk_hw *[]){ 3053 &nss_ppe_clk_src.clkr.hw }, 3054 .num_parents = 1, 3055 .flags = CLK_SET_RATE_PARENT, 3056 .ops = &clk_branch2_ops, 3057 }, 3058 }, 3059 }; 3060 3061 static struct clk_branch gcc_nss_ppe_clk = { 3062 .halt_reg = 0x68190, 3063 .clkr = { 3064 .enable_reg = 0x68190, 3065 .enable_mask = BIT(0), 3066 .hw.init = &(struct clk_init_data){ 3067 .name = "gcc_nss_ppe_clk", 3068 .parent_hws = (const struct clk_hw *[]){ 3069 &nss_ppe_clk_src.clkr.hw }, 3070 .num_parents = 1, 3071 .flags = CLK_SET_RATE_PARENT, 3072 .ops = &clk_branch2_ops, 3073 }, 3074 }, 3075 }; 3076 3077 static struct clk_branch gcc_nss_ppe_ipe_clk = { 3078 .halt_reg = 0x68338, 3079 .clkr = { 3080 .enable_reg = 0x68338, 3081 .enable_mask = BIT(0), 3082 .hw.init = &(struct clk_init_data){ 3083 .name = "gcc_nss_ppe_ipe_clk", 3084 .parent_hws = (const struct clk_hw *[]){ 3085 &nss_ppe_clk_src.clkr.hw }, 3086 .num_parents = 1, 3087 .flags = CLK_SET_RATE_PARENT, 3088 .ops = &clk_branch2_ops, 3089 }, 3090 }, 3091 }; 3092 3093 static struct clk_branch gcc_nss_ptp_ref_clk = { 3094 .halt_reg = 0x6816C, 3095 .clkr = { 3096 .enable_reg = 0x6816C, 3097 .enable_mask = BIT(0), 3098 .hw.init = &(struct clk_init_data){ 3099 .name = "gcc_nss_ptp_ref_clk", 3100 .parent_hws = (const struct clk_hw *[]){ 3101 &nss_ppe_cdiv_clk_src.hw }, 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_nssnoc_ce_apb_clk = { 3110 .halt_reg = 0x6830C, 3111 .clkr = { 3112 .enable_reg = 0x6830C, 3113 .enable_mask = BIT(0), 3114 .hw.init = &(struct clk_init_data){ 3115 .name = "gcc_nssnoc_ce_apb_clk", 3116 .parent_hws = (const struct clk_hw *[]){ 3117 &nss_ce_clk_src.clkr.hw }, 3118 .num_parents = 1, 3119 .flags = CLK_SET_RATE_PARENT, 3120 .ops = &clk_branch2_ops, 3121 }, 3122 }, 3123 }; 3124 3125 static struct clk_branch gcc_nssnoc_ce_axi_clk = { 3126 .halt_reg = 0x68308, 3127 .clkr = { 3128 .enable_reg = 0x68308, 3129 .enable_mask = BIT(0), 3130 .hw.init = &(struct clk_init_data){ 3131 .name = "gcc_nssnoc_ce_axi_clk", 3132 .parent_hws = (const struct clk_hw *[]){ 3133 &nss_ce_clk_src.clkr.hw }, 3134 .num_parents = 1, 3135 .flags = CLK_SET_RATE_PARENT, 3136 .ops = &clk_branch2_ops, 3137 }, 3138 }, 3139 }; 3140 3141 static struct clk_branch gcc_nssnoc_crypto_clk = { 3142 .halt_reg = 0x68314, 3143 .clkr = { 3144 .enable_reg = 0x68314, 3145 .enable_mask = BIT(0), 3146 .hw.init = &(struct clk_init_data){ 3147 .name = "gcc_nssnoc_crypto_clk", 3148 .parent_hws = (const struct clk_hw *[]){ 3149 &nss_crypto_clk_src.clkr.hw }, 3150 .num_parents = 1, 3151 .flags = CLK_SET_RATE_PARENT, 3152 .ops = &clk_branch2_ops, 3153 }, 3154 }, 3155 }; 3156 3157 static struct clk_branch gcc_nssnoc_ppe_cfg_clk = { 3158 .halt_reg = 0x68304, 3159 .clkr = { 3160 .enable_reg = 0x68304, 3161 .enable_mask = BIT(0), 3162 .hw.init = &(struct clk_init_data){ 3163 .name = "gcc_nssnoc_ppe_cfg_clk", 3164 .parent_hws = (const struct clk_hw *[]){ 3165 &nss_ppe_clk_src.clkr.hw }, 3166 .flags = CLK_SET_RATE_PARENT, 3167 .ops = &clk_branch2_ops, 3168 }, 3169 }, 3170 }; 3171 3172 static struct clk_branch gcc_nssnoc_ppe_clk = { 3173 .halt_reg = 0x68300, 3174 .clkr = { 3175 .enable_reg = 0x68300, 3176 .enable_mask = BIT(0), 3177 .hw.init = &(struct clk_init_data){ 3178 .name = "gcc_nssnoc_ppe_clk", 3179 .parent_hws = (const struct clk_hw *[]){ 3180 &nss_ppe_clk_src.clkr.hw }, 3181 .num_parents = 1, 3182 .flags = CLK_SET_RATE_PARENT, 3183 .ops = &clk_branch2_ops, 3184 }, 3185 }, 3186 }; 3187 3188 static struct clk_branch gcc_nssnoc_qosgen_ref_clk = { 3189 .halt_reg = 0x68180, 3190 .clkr = { 3191 .enable_reg = 0x68180, 3192 .enable_mask = BIT(0), 3193 .hw.init = &(struct clk_init_data){ 3194 .name = "gcc_nssnoc_qosgen_ref_clk", 3195 .parent_hws = (const struct clk_hw *[]){ 3196 &gcc_xo_clk_src.clkr.hw }, 3197 .num_parents = 1, 3198 .flags = CLK_SET_RATE_PARENT, 3199 .ops = &clk_branch2_ops, 3200 }, 3201 }, 3202 }; 3203 3204 static struct clk_branch gcc_nssnoc_snoc_clk = { 3205 .halt_reg = 0x68188, 3206 .clkr = { 3207 .enable_reg = 0x68188, 3208 .enable_mask = BIT(0), 3209 .hw.init = &(struct clk_init_data){ 3210 .name = "gcc_nssnoc_snoc_clk", 3211 .parent_hws = (const struct clk_hw *[]){ 3212 &system_noc_bfdcd_clk_src.clkr.hw }, 3213 .num_parents = 1, 3214 .flags = CLK_SET_RATE_PARENT, 3215 .ops = &clk_branch2_ops, 3216 }, 3217 }, 3218 }; 3219 3220 static struct clk_branch gcc_nssnoc_timeout_ref_clk = { 3221 .halt_reg = 0x68184, 3222 .clkr = { 3223 .enable_reg = 0x68184, 3224 .enable_mask = BIT(0), 3225 .hw.init = &(struct clk_init_data){ 3226 .name = "gcc_nssnoc_timeout_ref_clk", 3227 .parent_hws = (const struct clk_hw *[]){ 3228 &gcc_xo_div4_clk_src.hw }, 3229 .num_parents = 1, 3230 .flags = CLK_SET_RATE_PARENT, 3231 .ops = &clk_branch2_ops, 3232 }, 3233 }, 3234 }; 3235 3236 static struct clk_branch gcc_nssnoc_ubi0_ahb_clk = { 3237 .halt_reg = 0x68270, 3238 .clkr = { 3239 .enable_reg = 0x68270, 3240 .enable_mask = BIT(0), 3241 .hw.init = &(struct clk_init_data){ 3242 .name = "gcc_nssnoc_ubi0_ahb_clk", 3243 .parent_hws = (const struct clk_hw *[]){ 3244 &nss_ce_clk_src.clkr.hw }, 3245 .num_parents = 1, 3246 .flags = CLK_SET_RATE_PARENT, 3247 .ops = &clk_branch2_ops, 3248 }, 3249 }, 3250 }; 3251 3252 static struct clk_branch gcc_port1_mac_clk = { 3253 .halt_reg = 0x68320, 3254 .clkr = { 3255 .enable_reg = 0x68320, 3256 .enable_mask = BIT(0), 3257 .hw.init = &(struct clk_init_data){ 3258 .name = "gcc_port1_mac_clk", 3259 .parent_hws = (const struct clk_hw *[]){ 3260 &nss_ppe_clk_src.clkr.hw }, 3261 .num_parents = 1, 3262 .flags = CLK_SET_RATE_PARENT, 3263 .ops = &clk_branch2_ops, 3264 }, 3265 }, 3266 }; 3267 3268 static struct clk_branch gcc_port2_mac_clk = { 3269 .halt_reg = 0x68324, 3270 .clkr = { 3271 .enable_reg = 0x68324, 3272 .enable_mask = BIT(0), 3273 .hw.init = &(struct clk_init_data){ 3274 .name = "gcc_port2_mac_clk", 3275 .parent_hws = (const struct clk_hw *[]){ 3276 &nss_ppe_clk_src.clkr.hw }, 3277 .num_parents = 1, 3278 .flags = CLK_SET_RATE_PARENT, 3279 .ops = &clk_branch2_ops, 3280 }, 3281 }, 3282 }; 3283 3284 static struct clk_branch gcc_port3_mac_clk = { 3285 .halt_reg = 0x68328, 3286 .clkr = { 3287 .enable_reg = 0x68328, 3288 .enable_mask = BIT(0), 3289 .hw.init = &(struct clk_init_data){ 3290 .name = "gcc_port3_mac_clk", 3291 .parent_hws = (const struct clk_hw *[]){ 3292 &nss_ppe_clk_src.clkr.hw }, 3293 .num_parents = 1, 3294 .flags = CLK_SET_RATE_PARENT, 3295 .ops = &clk_branch2_ops, 3296 }, 3297 }, 3298 }; 3299 3300 static struct clk_branch gcc_port4_mac_clk = { 3301 .halt_reg = 0x6832c, 3302 .clkr = { 3303 .enable_reg = 0x6832c, 3304 .enable_mask = BIT(0), 3305 .hw.init = &(struct clk_init_data){ 3306 .name = "gcc_port4_mac_clk", 3307 .parent_hws = (const struct clk_hw *[]){ 3308 &nss_ppe_clk_src.clkr.hw }, 3309 .num_parents = 1, 3310 .flags = CLK_SET_RATE_PARENT, 3311 .ops = &clk_branch2_ops, 3312 }, 3313 }, 3314 }; 3315 3316 static struct clk_branch gcc_port5_mac_clk = { 3317 .halt_reg = 0x68330, 3318 .clkr = { 3319 .enable_reg = 0x68330, 3320 .enable_mask = BIT(0), 3321 .hw.init = &(struct clk_init_data){ 3322 .name = "gcc_port5_mac_clk", 3323 .parent_hws = (const struct clk_hw *[]){ 3324 &nss_ppe_clk_src.clkr.hw }, 3325 .num_parents = 1, 3326 .flags = CLK_SET_RATE_PARENT, 3327 .ops = &clk_branch2_ops, 3328 }, 3329 }, 3330 }; 3331 3332 static struct clk_branch gcc_ubi0_ahb_clk = { 3333 .halt_reg = 0x6820C, 3334 .halt_check = BRANCH_HALT_DELAY, 3335 .clkr = { 3336 .enable_reg = 0x6820C, 3337 .enable_mask = BIT(0), 3338 .hw.init = &(struct clk_init_data){ 3339 .name = "gcc_ubi0_ahb_clk", 3340 .parent_hws = (const struct clk_hw *[]){ 3341 &nss_ce_clk_src.clkr.hw }, 3342 .num_parents = 1, 3343 .flags = CLK_SET_RATE_PARENT, 3344 .ops = &clk_branch2_ops, 3345 }, 3346 }, 3347 }; 3348 3349 static struct clk_branch gcc_ubi0_axi_clk = { 3350 .halt_reg = 0x68200, 3351 .halt_check = BRANCH_HALT_DELAY, 3352 .clkr = { 3353 .enable_reg = 0x68200, 3354 .enable_mask = BIT(0), 3355 .hw.init = &(struct clk_init_data){ 3356 .name = "gcc_ubi0_axi_clk", 3357 .parent_hws = (const struct clk_hw *[]){ 3358 &ubi32_mem_noc_bfdcd_clk_src.clkr.hw }, 3359 .num_parents = 1, 3360 .flags = CLK_SET_RATE_PARENT, 3361 .ops = &clk_branch2_ops, 3362 }, 3363 }, 3364 }; 3365 3366 static struct clk_branch gcc_ubi0_nc_axi_clk = { 3367 .halt_reg = 0x68204, 3368 .halt_check = BRANCH_HALT_DELAY, 3369 .clkr = { 3370 .enable_reg = 0x68204, 3371 .enable_mask = BIT(0), 3372 .hw.init = &(struct clk_init_data){ 3373 .name = "gcc_ubi0_nc_axi_clk", 3374 .parent_hws = (const struct clk_hw *[]){ 3375 &snoc_nssnoc_bfdcd_clk_src.clkr.hw }, 3376 .num_parents = 1, 3377 .flags = CLK_SET_RATE_PARENT, 3378 .ops = &clk_branch2_ops, 3379 }, 3380 }, 3381 }; 3382 3383 static struct clk_branch gcc_ubi0_core_clk = { 3384 .halt_reg = 0x68210, 3385 .halt_check = BRANCH_HALT_DELAY, 3386 .clkr = { 3387 .enable_reg = 0x68210, 3388 .enable_mask = BIT(0), 3389 .hw.init = &(struct clk_init_data){ 3390 .name = "gcc_ubi0_core_clk", 3391 .parent_hws = (const struct clk_hw *[]){ 3392 &nss_ubi0_div_clk_src.clkr.hw }, 3393 .num_parents = 1, 3394 .flags = CLK_SET_RATE_PARENT, 3395 .ops = &clk_branch2_ops, 3396 }, 3397 }, 3398 }; 3399 3400 static struct clk_branch gcc_pcie0_ahb_clk = { 3401 .halt_reg = 0x75010, 3402 .clkr = { 3403 .enable_reg = 0x75010, 3404 .enable_mask = BIT(0), 3405 .hw.init = &(struct clk_init_data){ 3406 .name = "gcc_pcie0_ahb_clk", 3407 .parent_hws = (const struct clk_hw *[]){ 3408 &pcnoc_bfdcd_clk_src.clkr.hw }, 3409 .num_parents = 1, 3410 .flags = CLK_SET_RATE_PARENT, 3411 .ops = &clk_branch2_ops, 3412 }, 3413 }, 3414 }; 3415 3416 static struct clk_branch gcc_pcie0_aux_clk = { 3417 .halt_reg = 0x75014, 3418 .clkr = { 3419 .enable_reg = 0x75014, 3420 .enable_mask = BIT(0), 3421 .hw.init = &(struct clk_init_data){ 3422 .name = "gcc_pcie0_aux_clk", 3423 .parent_hws = (const struct clk_hw *[]){ 3424 &pcie0_aux_clk_src.clkr.hw }, 3425 .num_parents = 1, 3426 .flags = CLK_SET_RATE_PARENT, 3427 .ops = &clk_branch2_ops, 3428 }, 3429 }, 3430 }; 3431 3432 static struct clk_branch gcc_pcie0_axi_m_clk = { 3433 .halt_reg = 0x75008, 3434 .clkr = { 3435 .enable_reg = 0x75008, 3436 .enable_mask = BIT(0), 3437 .hw.init = &(struct clk_init_data){ 3438 .name = "gcc_pcie0_axi_m_clk", 3439 .parent_hws = (const struct clk_hw *[]){ 3440 &pcie0_axi_clk_src.clkr.hw }, 3441 .num_parents = 1, 3442 .flags = CLK_SET_RATE_PARENT, 3443 .ops = &clk_branch2_ops, 3444 }, 3445 }, 3446 }; 3447 3448 static struct clk_branch gcc_pcie0_axi_s_clk = { 3449 .halt_reg = 0x7500c, 3450 .clkr = { 3451 .enable_reg = 0x7500c, 3452 .enable_mask = BIT(0), 3453 .hw.init = &(struct clk_init_data){ 3454 .name = "gcc_pcie0_axi_s_clk", 3455 .parent_hws = (const struct clk_hw *[]){ 3456 &pcie0_axi_clk_src.clkr.hw }, 3457 .num_parents = 1, 3458 .flags = CLK_SET_RATE_PARENT, 3459 .ops = &clk_branch2_ops, 3460 }, 3461 }, 3462 }; 3463 3464 static struct clk_branch gcc_sys_noc_pcie0_axi_clk = { 3465 .halt_reg = 0x26048, 3466 .clkr = { 3467 .enable_reg = 0x26048, 3468 .enable_mask = BIT(0), 3469 .hw.init = &(struct clk_init_data){ 3470 .name = "gcc_sys_noc_pcie0_axi_clk", 3471 .parent_hws = (const struct clk_hw *[]){ 3472 &pcie0_axi_clk_src.clkr.hw }, 3473 .num_parents = 1, 3474 .flags = CLK_SET_RATE_PARENT, 3475 .ops = &clk_branch2_ops, 3476 }, 3477 }, 3478 }; 3479 3480 static struct clk_branch gcc_pcie0_pipe_clk = { 3481 .halt_reg = 0x75018, 3482 .halt_check = BRANCH_HALT_DELAY, 3483 .clkr = { 3484 .enable_reg = 0x75018, 3485 .enable_mask = BIT(0), 3486 .hw.init = &(struct clk_init_data){ 3487 .name = "gcc_pcie0_pipe_clk", 3488 .parent_hws = (const struct clk_hw *[]){ 3489 &pcie0_pipe_clk_src.clkr.hw }, 3490 .num_parents = 1, 3491 .flags = CLK_SET_RATE_PARENT, 3492 .ops = &clk_branch2_ops, 3493 }, 3494 }, 3495 }; 3496 3497 static struct clk_branch gcc_prng_ahb_clk = { 3498 .halt_reg = 0x13004, 3499 .halt_check = BRANCH_HALT_VOTED, 3500 .clkr = { 3501 .enable_reg = 0x0b004, 3502 .enable_mask = BIT(8), 3503 .hw.init = &(struct clk_init_data){ 3504 .name = "gcc_prng_ahb_clk", 3505 .parent_hws = (const struct clk_hw *[]){ 3506 &pcnoc_bfdcd_clk_src.clkr.hw }, 3507 .num_parents = 1, 3508 .flags = CLK_SET_RATE_PARENT, 3509 .ops = &clk_branch2_ops, 3510 }, 3511 }, 3512 }; 3513 3514 static struct clk_branch gcc_qdss_dap_clk = { 3515 .halt_reg = 0x29084, 3516 .clkr = { 3517 .enable_reg = 0x29084, 3518 .enable_mask = BIT(0), 3519 .hw.init = &(struct clk_init_data){ 3520 .name = "gcc_qdss_dap_clk", 3521 .parent_hws = (const struct clk_hw *[]){ 3522 &qdss_dap_sync_clk_src.hw }, 3523 .num_parents = 1, 3524 .flags = CLK_SET_RATE_PARENT, 3525 .ops = &clk_branch2_ops, 3526 }, 3527 }, 3528 }; 3529 3530 static struct clk_branch gcc_qpic_ahb_clk = { 3531 .halt_reg = 0x57024, 3532 .clkr = { 3533 .enable_reg = 0x57024, 3534 .enable_mask = BIT(0), 3535 .hw.init = &(struct clk_init_data){ 3536 .name = "gcc_qpic_ahb_clk", 3537 .parent_hws = (const struct clk_hw *[]){ 3538 &pcnoc_bfdcd_clk_src.clkr.hw }, 3539 .num_parents = 1, 3540 .flags = CLK_SET_RATE_PARENT, 3541 .ops = &clk_branch2_ops, 3542 }, 3543 }, 3544 }; 3545 3546 static struct clk_branch gcc_qpic_clk = { 3547 .halt_reg = 0x57020, 3548 .clkr = { 3549 .enable_reg = 0x57020, 3550 .enable_mask = BIT(0), 3551 .hw.init = &(struct clk_init_data){ 3552 .name = "gcc_qpic_clk", 3553 .parent_hws = (const struct clk_hw *[]){ 3554 &pcnoc_bfdcd_clk_src.clkr.hw }, 3555 .num_parents = 1, 3556 .flags = CLK_SET_RATE_PARENT, 3557 .ops = &clk_branch2_ops, 3558 }, 3559 }, 3560 }; 3561 3562 static struct clk_branch gcc_sdcc1_ahb_clk = { 3563 .halt_reg = 0x4201c, 3564 .clkr = { 3565 .enable_reg = 0x4201c, 3566 .enable_mask = BIT(0), 3567 .hw.init = &(struct clk_init_data){ 3568 .name = "gcc_sdcc1_ahb_clk", 3569 .parent_hws = (const struct clk_hw *[]){ 3570 &pcnoc_bfdcd_clk_src.clkr.hw }, 3571 .num_parents = 1, 3572 .flags = CLK_SET_RATE_PARENT, 3573 .ops = &clk_branch2_ops, 3574 }, 3575 }, 3576 }; 3577 3578 static struct clk_branch gcc_sdcc1_apps_clk = { 3579 .halt_reg = 0x42018, 3580 .clkr = { 3581 .enable_reg = 0x42018, 3582 .enable_mask = BIT(0), 3583 .hw.init = &(struct clk_init_data){ 3584 .name = "gcc_sdcc1_apps_clk", 3585 .parent_hws = (const struct clk_hw *[]){ 3586 &sdcc1_apps_clk_src.clkr.hw }, 3587 .num_parents = 1, 3588 .flags = CLK_SET_RATE_PARENT, 3589 .ops = &clk_branch2_ops, 3590 }, 3591 }, 3592 }; 3593 3594 static struct clk_branch gcc_uniphy0_ahb_clk = { 3595 .halt_reg = 0x56008, 3596 .clkr = { 3597 .enable_reg = 0x56008, 3598 .enable_mask = BIT(0), 3599 .hw.init = &(struct clk_init_data){ 3600 .name = "gcc_uniphy0_ahb_clk", 3601 .parent_hws = (const struct clk_hw *[]){ 3602 &pcnoc_bfdcd_clk_src.clkr.hw }, 3603 .num_parents = 1, 3604 .flags = CLK_SET_RATE_PARENT, 3605 .ops = &clk_branch2_ops, 3606 }, 3607 }, 3608 }; 3609 3610 static struct clk_branch gcc_uniphy0_port1_rx_clk = { 3611 .halt_reg = 0x56010, 3612 .clkr = { 3613 .enable_reg = 0x56010, 3614 .enable_mask = BIT(0), 3615 .hw.init = &(struct clk_init_data){ 3616 .name = "gcc_uniphy0_port1_rx_clk", 3617 .parent_hws = (const struct clk_hw *[]){ 3618 &nss_port1_rx_div_clk_src.clkr.hw }, 3619 .num_parents = 1, 3620 .flags = CLK_SET_RATE_PARENT, 3621 .ops = &clk_branch2_ops, 3622 }, 3623 }, 3624 }; 3625 3626 static struct clk_branch gcc_uniphy0_port1_tx_clk = { 3627 .halt_reg = 0x56014, 3628 .clkr = { 3629 .enable_reg = 0x56014, 3630 .enable_mask = BIT(0), 3631 .hw.init = &(struct clk_init_data){ 3632 .name = "gcc_uniphy0_port1_tx_clk", 3633 .parent_hws = (const struct clk_hw *[]){ 3634 &nss_port1_tx_div_clk_src.clkr.hw }, 3635 .num_parents = 1, 3636 .flags = CLK_SET_RATE_PARENT, 3637 .ops = &clk_branch2_ops, 3638 }, 3639 }, 3640 }; 3641 3642 static struct clk_branch gcc_uniphy0_port2_rx_clk = { 3643 .halt_reg = 0x56018, 3644 .clkr = { 3645 .enable_reg = 0x56018, 3646 .enable_mask = BIT(0), 3647 .hw.init = &(struct clk_init_data){ 3648 .name = "gcc_uniphy0_port2_rx_clk", 3649 .parent_hws = (const struct clk_hw *[]){ 3650 &nss_port2_rx_div_clk_src.clkr.hw }, 3651 .num_parents = 1, 3652 .flags = CLK_SET_RATE_PARENT, 3653 .ops = &clk_branch2_ops, 3654 }, 3655 }, 3656 }; 3657 3658 static struct clk_branch gcc_uniphy0_port2_tx_clk = { 3659 .halt_reg = 0x5601c, 3660 .clkr = { 3661 .enable_reg = 0x5601c, 3662 .enable_mask = BIT(0), 3663 .hw.init = &(struct clk_init_data){ 3664 .name = "gcc_uniphy0_port2_tx_clk", 3665 .parent_hws = (const struct clk_hw *[]){ 3666 &nss_port2_tx_div_clk_src.clkr.hw }, 3667 .num_parents = 1, 3668 .flags = CLK_SET_RATE_PARENT, 3669 .ops = &clk_branch2_ops, 3670 }, 3671 }, 3672 }; 3673 3674 static struct clk_branch gcc_uniphy0_port3_rx_clk = { 3675 .halt_reg = 0x56020, 3676 .clkr = { 3677 .enable_reg = 0x56020, 3678 .enable_mask = BIT(0), 3679 .hw.init = &(struct clk_init_data){ 3680 .name = "gcc_uniphy0_port3_rx_clk", 3681 .parent_hws = (const struct clk_hw *[]){ 3682 &nss_port3_rx_div_clk_src.clkr.hw }, 3683 .num_parents = 1, 3684 .flags = CLK_SET_RATE_PARENT, 3685 .ops = &clk_branch2_ops, 3686 }, 3687 }, 3688 }; 3689 3690 static struct clk_branch gcc_uniphy0_port3_tx_clk = { 3691 .halt_reg = 0x56024, 3692 .clkr = { 3693 .enable_reg = 0x56024, 3694 .enable_mask = BIT(0), 3695 .hw.init = &(struct clk_init_data){ 3696 .name = "gcc_uniphy0_port3_tx_clk", 3697 .parent_hws = (const struct clk_hw *[]){ 3698 &nss_port3_tx_div_clk_src.clkr.hw }, 3699 .num_parents = 1, 3700 .flags = CLK_SET_RATE_PARENT, 3701 .ops = &clk_branch2_ops, 3702 }, 3703 }, 3704 }; 3705 3706 static struct clk_branch gcc_uniphy0_port4_rx_clk = { 3707 .halt_reg = 0x56028, 3708 .clkr = { 3709 .enable_reg = 0x56028, 3710 .enable_mask = BIT(0), 3711 .hw.init = &(struct clk_init_data){ 3712 .name = "gcc_uniphy0_port4_rx_clk", 3713 .parent_hws = (const struct clk_hw *[]){ 3714 &nss_port4_rx_div_clk_src.clkr.hw }, 3715 .num_parents = 1, 3716 .flags = CLK_SET_RATE_PARENT, 3717 .ops = &clk_branch2_ops, 3718 }, 3719 }, 3720 }; 3721 3722 static struct clk_branch gcc_uniphy0_port4_tx_clk = { 3723 .halt_reg = 0x5602c, 3724 .clkr = { 3725 .enable_reg = 0x5602c, 3726 .enable_mask = BIT(0), 3727 .hw.init = &(struct clk_init_data){ 3728 .name = "gcc_uniphy0_port4_tx_clk", 3729 .parent_hws = (const struct clk_hw *[]){ 3730 &nss_port4_tx_div_clk_src.clkr.hw }, 3731 .num_parents = 1, 3732 .flags = CLK_SET_RATE_PARENT, 3733 .ops = &clk_branch2_ops, 3734 }, 3735 }, 3736 }; 3737 3738 static struct clk_branch gcc_uniphy0_port5_rx_clk = { 3739 .halt_reg = 0x56030, 3740 .clkr = { 3741 .enable_reg = 0x56030, 3742 .enable_mask = BIT(0), 3743 .hw.init = &(struct clk_init_data){ 3744 .name = "gcc_uniphy0_port5_rx_clk", 3745 .parent_hws = (const struct clk_hw *[]){ 3746 &nss_port5_rx_div_clk_src.clkr.hw }, 3747 .num_parents = 1, 3748 .flags = CLK_SET_RATE_PARENT, 3749 .ops = &clk_branch2_ops, 3750 }, 3751 }, 3752 }; 3753 3754 static struct clk_branch gcc_uniphy0_port5_tx_clk = { 3755 .halt_reg = 0x56034, 3756 .clkr = { 3757 .enable_reg = 0x56034, 3758 .enable_mask = BIT(0), 3759 .hw.init = &(struct clk_init_data){ 3760 .name = "gcc_uniphy0_port5_tx_clk", 3761 .parent_hws = (const struct clk_hw *[]){ 3762 &nss_port5_tx_div_clk_src.clkr.hw }, 3763 .num_parents = 1, 3764 .flags = CLK_SET_RATE_PARENT, 3765 .ops = &clk_branch2_ops, 3766 }, 3767 }, 3768 }; 3769 3770 static struct clk_branch gcc_uniphy0_sys_clk = { 3771 .halt_reg = 0x5600C, 3772 .clkr = { 3773 .enable_reg = 0x5600C, 3774 .enable_mask = BIT(0), 3775 .hw.init = &(struct clk_init_data){ 3776 .name = "gcc_uniphy0_sys_clk", 3777 .parent_hws = (const struct clk_hw *[]){ 3778 &gcc_xo_clk_src.clkr.hw }, 3779 .num_parents = 1, 3780 .flags = CLK_SET_RATE_PARENT, 3781 .ops = &clk_branch2_ops, 3782 }, 3783 }, 3784 }; 3785 3786 static struct clk_branch gcc_uniphy1_ahb_clk = { 3787 .halt_reg = 0x56108, 3788 .clkr = { 3789 .enable_reg = 0x56108, 3790 .enable_mask = BIT(0), 3791 .hw.init = &(struct clk_init_data){ 3792 .name = "gcc_uniphy1_ahb_clk", 3793 .parent_hws = (const struct clk_hw *[]){ 3794 &pcnoc_bfdcd_clk_src.clkr.hw }, 3795 .num_parents = 1, 3796 .flags = CLK_SET_RATE_PARENT, 3797 .ops = &clk_branch2_ops, 3798 }, 3799 }, 3800 }; 3801 3802 static struct clk_branch gcc_uniphy1_port5_rx_clk = { 3803 .halt_reg = 0x56110, 3804 .clkr = { 3805 .enable_reg = 0x56110, 3806 .enable_mask = BIT(0), 3807 .hw.init = &(struct clk_init_data){ 3808 .name = "gcc_uniphy1_port5_rx_clk", 3809 .parent_hws = (const struct clk_hw *[]){ 3810 &nss_port5_rx_div_clk_src.clkr.hw }, 3811 .num_parents = 1, 3812 .flags = CLK_SET_RATE_PARENT, 3813 .ops = &clk_branch2_ops, 3814 }, 3815 }, 3816 }; 3817 3818 static struct clk_branch gcc_uniphy1_port5_tx_clk = { 3819 .halt_reg = 0x56114, 3820 .clkr = { 3821 .enable_reg = 0x56114, 3822 .enable_mask = BIT(0), 3823 .hw.init = &(struct clk_init_data){ 3824 .name = "gcc_uniphy1_port5_tx_clk", 3825 .parent_hws = (const struct clk_hw *[]){ 3826 &nss_port5_tx_div_clk_src.clkr.hw }, 3827 .num_parents = 1, 3828 .flags = CLK_SET_RATE_PARENT, 3829 .ops = &clk_branch2_ops, 3830 }, 3831 }, 3832 }; 3833 3834 static struct clk_branch gcc_uniphy1_sys_clk = { 3835 .halt_reg = 0x5610C, 3836 .clkr = { 3837 .enable_reg = 0x5610C, 3838 .enable_mask = BIT(0), 3839 .hw.init = &(struct clk_init_data){ 3840 .name = "gcc_uniphy1_sys_clk", 3841 .parent_hws = (const struct clk_hw *[]){ 3842 &gcc_xo_clk_src.clkr.hw }, 3843 .num_parents = 1, 3844 .flags = CLK_SET_RATE_PARENT, 3845 .ops = &clk_branch2_ops, 3846 }, 3847 }, 3848 }; 3849 3850 static struct clk_branch gcc_usb0_aux_clk = { 3851 .halt_reg = 0x3e044, 3852 .clkr = { 3853 .enable_reg = 0x3e044, 3854 .enable_mask = BIT(0), 3855 .hw.init = &(struct clk_init_data){ 3856 .name = "gcc_usb0_aux_clk", 3857 .parent_hws = (const struct clk_hw *[]){ 3858 &usb0_aux_clk_src.clkr.hw }, 3859 .num_parents = 1, 3860 .flags = CLK_SET_RATE_PARENT, 3861 .ops = &clk_branch2_ops, 3862 }, 3863 }, 3864 }; 3865 3866 static struct clk_branch gcc_usb0_master_clk = { 3867 .halt_reg = 0x3e000, 3868 .clkr = { 3869 .enable_reg = 0x3e000, 3870 .enable_mask = BIT(0), 3871 .hw.init = &(struct clk_init_data){ 3872 .name = "gcc_usb0_master_clk", 3873 .parent_hws = (const struct clk_hw *[]){ 3874 &usb0_master_clk_src.clkr.hw }, 3875 .num_parents = 1, 3876 .flags = CLK_SET_RATE_PARENT, 3877 .ops = &clk_branch2_ops, 3878 }, 3879 }, 3880 }; 3881 3882 static struct clk_branch gcc_snoc_bus_timeout2_ahb_clk = { 3883 .halt_reg = 0x47014, 3884 .clkr = { 3885 .enable_reg = 0x47014, 3886 .enable_mask = BIT(0), 3887 .hw.init = &(struct clk_init_data){ 3888 .name = "gcc_snoc_bus_timeout2_ahb_clk", 3889 .parent_hws = (const struct clk_hw *[]){ 3890 &usb0_master_clk_src.clkr.hw }, 3891 .num_parents = 1, 3892 .flags = CLK_SET_RATE_PARENT, 3893 .ops = &clk_branch2_ops, 3894 }, 3895 }, 3896 }; 3897 3898 static struct clk_rcg2 pcie0_rchng_clk_src = { 3899 .cmd_rcgr = 0x75070, 3900 .freq_tbl = ftbl_pcie_rchng_clk_src, 3901 .hid_width = 5, 3902 .parent_map = gcc_xo_gpll0_map, 3903 .clkr.hw.init = &(struct clk_init_data){ 3904 .name = "pcie0_rchng_clk_src", 3905 .parent_data = gcc_xo_gpll0, 3906 .num_parents = 2, 3907 .ops = &clk_rcg2_ops, 3908 }, 3909 }; 3910 3911 static struct clk_branch gcc_pcie0_rchng_clk = { 3912 .halt_reg = 0x75070, 3913 .clkr = { 3914 .enable_reg = 0x75070, 3915 .enable_mask = BIT(1), 3916 .hw.init = &(struct clk_init_data){ 3917 .name = "gcc_pcie0_rchng_clk", 3918 .parent_hws = (const struct clk_hw *[]){ 3919 &pcie0_rchng_clk_src.clkr.hw }, 3920 .num_parents = 1, 3921 .flags = CLK_SET_RATE_PARENT, 3922 .ops = &clk_branch2_ops, 3923 }, 3924 }, 3925 }; 3926 3927 static struct clk_branch gcc_pcie0_axi_s_bridge_clk = { 3928 .halt_reg = 0x75048, 3929 .clkr = { 3930 .enable_reg = 0x75048, 3931 .enable_mask = BIT(0), 3932 .hw.init = &(struct clk_init_data){ 3933 .name = "gcc_pcie0_axi_s_bridge_clk", 3934 .parent_hws = (const struct clk_hw *[]){ 3935 &pcie0_axi_clk_src.clkr.hw }, 3936 .num_parents = 1, 3937 .flags = CLK_SET_RATE_PARENT, 3938 .ops = &clk_branch2_ops, 3939 }, 3940 }, 3941 }; 3942 3943 static struct clk_branch gcc_sys_noc_usb0_axi_clk = { 3944 .halt_reg = 0x26040, 3945 .clkr = { 3946 .enable_reg = 0x26040, 3947 .enable_mask = BIT(0), 3948 .hw.init = &(struct clk_init_data){ 3949 .name = "gcc_sys_noc_usb0_axi_clk", 3950 .parent_hws = (const struct clk_hw *[]){ 3951 &usb0_master_clk_src.clkr.hw }, 3952 .num_parents = 1, 3953 .flags = CLK_SET_RATE_PARENT, 3954 .ops = &clk_branch2_ops, 3955 }, 3956 }, 3957 }; 3958 3959 static struct clk_branch gcc_usb0_mock_utmi_clk = { 3960 .halt_reg = 0x3e008, 3961 .clkr = { 3962 .enable_reg = 0x3e008, 3963 .enable_mask = BIT(0), 3964 .hw.init = &(struct clk_init_data){ 3965 .name = "gcc_usb0_mock_utmi_clk", 3966 .parent_hws = (const struct clk_hw *[]){ 3967 &usb0_mock_utmi_clk_src.clkr.hw }, 3968 .num_parents = 1, 3969 .flags = CLK_SET_RATE_PARENT, 3970 .ops = &clk_branch2_ops, 3971 }, 3972 }, 3973 }; 3974 3975 static struct clk_branch gcc_usb0_phy_cfg_ahb_clk = { 3976 .halt_reg = 0x3e080, 3977 .clkr = { 3978 .enable_reg = 0x3e080, 3979 .enable_mask = BIT(0), 3980 .hw.init = &(struct clk_init_data){ 3981 .name = "gcc_usb0_phy_cfg_ahb_clk", 3982 .parent_hws = (const struct clk_hw *[]){ 3983 &pcnoc_bfdcd_clk_src.clkr.hw }, 3984 .num_parents = 1, 3985 .flags = CLK_SET_RATE_PARENT, 3986 .ops = &clk_branch2_ops, 3987 }, 3988 }, 3989 }; 3990 3991 static struct clk_branch gcc_usb0_pipe_clk = { 3992 .halt_reg = 0x3e040, 3993 .halt_check = BRANCH_HALT_DELAY, 3994 .clkr = { 3995 .enable_reg = 0x3e040, 3996 .enable_mask = BIT(0), 3997 .hw.init = &(struct clk_init_data){ 3998 .name = "gcc_usb0_pipe_clk", 3999 .parent_hws = (const struct clk_hw *[]){ 4000 &usb0_pipe_clk_src.clkr.hw }, 4001 .num_parents = 1, 4002 .flags = CLK_SET_RATE_PARENT, 4003 .ops = &clk_branch2_ops, 4004 }, 4005 }, 4006 }; 4007 4008 static struct clk_branch gcc_usb0_sleep_clk = { 4009 .halt_reg = 0x3e004, 4010 .clkr = { 4011 .enable_reg = 0x3e004, 4012 .enable_mask = BIT(0), 4013 .hw.init = &(struct clk_init_data){ 4014 .name = "gcc_usb0_sleep_clk", 4015 .parent_hws = (const struct clk_hw *[]){ 4016 &gcc_sleep_clk_src.clkr.hw }, 4017 .num_parents = 1, 4018 .flags = CLK_SET_RATE_PARENT, 4019 .ops = &clk_branch2_ops, 4020 }, 4021 }, 4022 }; 4023 4024 static struct clk_branch gcc_usb1_master_clk = { 4025 .halt_reg = 0x3f000, 4026 .clkr = { 4027 .enable_reg = 0x3f000, 4028 .enable_mask = BIT(0), 4029 .hw.init = &(struct clk_init_data){ 4030 .name = "gcc_usb1_master_clk", 4031 .parent_hws = (const struct clk_hw *[]){ 4032 &pcnoc_bfdcd_clk_src.clkr.hw }, 4033 .num_parents = 1, 4034 .flags = CLK_SET_RATE_PARENT, 4035 .ops = &clk_branch2_ops, 4036 }, 4037 }, 4038 }; 4039 4040 static struct clk_branch gcc_usb1_mock_utmi_clk = { 4041 .halt_reg = 0x3f008, 4042 .clkr = { 4043 .enable_reg = 0x3f008, 4044 .enable_mask = BIT(0), 4045 .hw.init = &(struct clk_init_data){ 4046 .name = "gcc_usb1_mock_utmi_clk", 4047 .parent_hws = (const struct clk_hw *[]){ 4048 &usb1_mock_utmi_clk_src.clkr.hw }, 4049 .num_parents = 1, 4050 .flags = CLK_SET_RATE_PARENT, 4051 .ops = &clk_branch2_ops, 4052 }, 4053 }, 4054 }; 4055 4056 static struct clk_branch gcc_usb1_phy_cfg_ahb_clk = { 4057 .halt_reg = 0x3f080, 4058 .clkr = { 4059 .enable_reg = 0x3f080, 4060 .enable_mask = BIT(0), 4061 .hw.init = &(struct clk_init_data){ 4062 .name = "gcc_usb1_phy_cfg_ahb_clk", 4063 .parent_hws = (const struct clk_hw *[]){ 4064 &pcnoc_bfdcd_clk_src.clkr.hw }, 4065 .num_parents = 1, 4066 .flags = CLK_SET_RATE_PARENT, 4067 .ops = &clk_branch2_ops, 4068 }, 4069 }, 4070 }; 4071 4072 static struct clk_branch gcc_usb1_sleep_clk = { 4073 .halt_reg = 0x3f004, 4074 .clkr = { 4075 .enable_reg = 0x3f004, 4076 .enable_mask = BIT(0), 4077 .hw.init = &(struct clk_init_data){ 4078 .name = "gcc_usb1_sleep_clk", 4079 .parent_hws = (const struct clk_hw *[]){ 4080 &gcc_sleep_clk_src.clkr.hw }, 4081 .num_parents = 1, 4082 .flags = CLK_SET_RATE_PARENT, 4083 .ops = &clk_branch2_ops, 4084 }, 4085 }, 4086 }; 4087 4088 static struct clk_branch gcc_cmn_12gpll_ahb_clk = { 4089 .halt_reg = 0x56308, 4090 .clkr = { 4091 .enable_reg = 0x56308, 4092 .enable_mask = BIT(0), 4093 .hw.init = &(struct clk_init_data){ 4094 .name = "gcc_cmn_12gpll_ahb_clk", 4095 .parent_hws = (const struct clk_hw *[]){ 4096 &pcnoc_bfdcd_clk_src.clkr.hw }, 4097 .num_parents = 1, 4098 .flags = CLK_SET_RATE_PARENT, 4099 .ops = &clk_branch2_ops, 4100 }, 4101 }, 4102 }; 4103 4104 static struct clk_branch gcc_cmn_12gpll_sys_clk = { 4105 .halt_reg = 0x5630c, 4106 .clkr = { 4107 .enable_reg = 0x5630c, 4108 .enable_mask = BIT(0), 4109 .hw.init = &(struct clk_init_data){ 4110 .name = "gcc_cmn_12gpll_sys_clk", 4111 .parent_hws = (const struct clk_hw *[]){ 4112 &gcc_xo_clk_src.clkr.hw }, 4113 .num_parents = 1, 4114 .flags = CLK_SET_RATE_PARENT, 4115 .ops = &clk_branch2_ops, 4116 }, 4117 }, 4118 }; 4119 4120 static struct clk_branch gcc_sdcc1_ice_core_clk = { 4121 .halt_reg = 0x5d014, 4122 .clkr = { 4123 .enable_reg = 0x5d014, 4124 .enable_mask = BIT(0), 4125 .hw.init = &(struct clk_init_data){ 4126 .name = "gcc_sdcc1_ice_core_clk", 4127 .parent_hws = (const struct clk_hw *[]){ 4128 &sdcc1_ice_core_clk_src.clkr.hw }, 4129 .num_parents = 1, 4130 .flags = CLK_SET_RATE_PARENT, 4131 .ops = &clk_branch2_ops, 4132 }, 4133 }, 4134 }; 4135 4136 static struct clk_branch gcc_dcc_clk = { 4137 .halt_reg = 0x77004, 4138 .clkr = { 4139 .enable_reg = 0x77004, 4140 .enable_mask = BIT(0), 4141 .hw.init = &(struct clk_init_data){ 4142 .name = "gcc_dcc_clk", 4143 .parent_hws = (const struct clk_hw *[]){ 4144 &pcnoc_bfdcd_clk_src.clkr.hw }, 4145 .num_parents = 1, 4146 .flags = CLK_SET_RATE_PARENT, 4147 .ops = &clk_branch2_ops, 4148 }, 4149 }, 4150 }; 4151 4152 static const struct alpha_pll_config ubi32_pll_config = { 4153 .l = 0x3e, 4154 .alpha = 0x57, 4155 .config_ctl_val = 0x240d6aa8, 4156 .config_ctl_hi_val = 0x3c2, 4157 .main_output_mask = BIT(0), 4158 .aux_output_mask = BIT(1), 4159 .pre_div_val = 0x0, 4160 .pre_div_mask = BIT(12), 4161 .post_div_val = 0x0, 4162 .post_div_mask = GENMASK(9, 8), 4163 }; 4164 4165 static const struct alpha_pll_config nss_crypto_pll_config = { 4166 .l = 0x32, 4167 .alpha = 0x0, 4168 .alpha_hi = 0x0, 4169 .config_ctl_val = 0x4001055b, 4170 .main_output_mask = BIT(0), 4171 .pre_div_val = 0x0, 4172 .pre_div_mask = GENMASK(14, 12), 4173 .post_div_val = 0x1 << 8, 4174 .post_div_mask = GENMASK(11, 8), 4175 .vco_mask = GENMASK(21, 20), 4176 .vco_val = 0x0, 4177 .alpha_en_mask = BIT(24), 4178 }; 4179 4180 static struct clk_hw *gcc_ipq6018_hws[] = { 4181 &gpll0_out_main_div2.hw, 4182 &gcc_xo_div4_clk_src.hw, 4183 &nss_ppe_cdiv_clk_src.hw, 4184 &gpll6_out_main_div2.hw, 4185 &qdss_dap_sync_clk_src.hw, 4186 &qdss_tsctr_div2_clk_src.hw, 4187 }; 4188 4189 static struct clk_regmap *gcc_ipq6018_clks[] = { 4190 [GPLL0_MAIN] = &gpll0_main.clkr, 4191 [GPLL0] = &gpll0.clkr, 4192 [UBI32_PLL_MAIN] = &ubi32_pll_main.clkr, 4193 [UBI32_PLL] = &ubi32_pll.clkr, 4194 [GPLL6_MAIN] = &gpll6_main.clkr, 4195 [GPLL6] = &gpll6.clkr, 4196 [GPLL4_MAIN] = &gpll4_main.clkr, 4197 [GPLL4] = &gpll4.clkr, 4198 [PCNOC_BFDCD_CLK_SRC] = &pcnoc_bfdcd_clk_src.clkr, 4199 [GPLL2_MAIN] = &gpll2_main.clkr, 4200 [GPLL2] = &gpll2.clkr, 4201 [NSS_CRYPTO_PLL_MAIN] = &nss_crypto_pll_main.clkr, 4202 [NSS_CRYPTO_PLL] = &nss_crypto_pll.clkr, 4203 [QDSS_TSCTR_CLK_SRC] = &qdss_tsctr_clk_src.clkr, 4204 [QDSS_AT_CLK_SRC] = &qdss_at_clk_src.clkr, 4205 [NSS_PPE_CLK_SRC] = &nss_ppe_clk_src.clkr, 4206 [GCC_XO_CLK_SRC] = &gcc_xo_clk_src.clkr, 4207 [SYSTEM_NOC_BFDCD_CLK_SRC] = &system_noc_bfdcd_clk_src.clkr, 4208 [SNOC_NSSNOC_BFDCD_CLK_SRC] = &snoc_nssnoc_bfdcd_clk_src.clkr, 4209 [NSS_CE_CLK_SRC] = &nss_ce_clk_src.clkr, 4210 [GCC_SLEEP_CLK_SRC] = &gcc_sleep_clk_src.clkr, 4211 [APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr, 4212 [NSS_PORT5_RX_CLK_SRC] = &nss_port5_rx_clk_src.clkr, 4213 [NSS_PORT5_TX_CLK_SRC] = &nss_port5_tx_clk_src.clkr, 4214 [UBI32_MEM_NOC_BFDCD_CLK_SRC] = &ubi32_mem_noc_bfdcd_clk_src.clkr, 4215 [PCIE0_AXI_CLK_SRC] = &pcie0_axi_clk_src.clkr, 4216 [USB0_MASTER_CLK_SRC] = &usb0_master_clk_src.clkr, 4217 [APSS_AHB_POSTDIV_CLK_SRC] = &apss_ahb_postdiv_clk_src.clkr, 4218 [NSS_PORT1_RX_CLK_SRC] = &nss_port1_rx_clk_src.clkr, 4219 [NSS_PORT1_TX_CLK_SRC] = &nss_port1_tx_clk_src.clkr, 4220 [NSS_PORT2_RX_CLK_SRC] = &nss_port2_rx_clk_src.clkr, 4221 [NSS_PORT2_TX_CLK_SRC] = &nss_port2_tx_clk_src.clkr, 4222 [NSS_PORT3_RX_CLK_SRC] = &nss_port3_rx_clk_src.clkr, 4223 [NSS_PORT3_TX_CLK_SRC] = &nss_port3_tx_clk_src.clkr, 4224 [NSS_PORT4_RX_CLK_SRC] = &nss_port4_rx_clk_src.clkr, 4225 [NSS_PORT4_TX_CLK_SRC] = &nss_port4_tx_clk_src.clkr, 4226 [NSS_PORT5_RX_DIV_CLK_SRC] = &nss_port5_rx_div_clk_src.clkr, 4227 [NSS_PORT5_TX_DIV_CLK_SRC] = &nss_port5_tx_div_clk_src.clkr, 4228 [APSS_AXI_CLK_SRC] = &apss_axi_clk_src.clkr, 4229 [NSS_CRYPTO_CLK_SRC] = &nss_crypto_clk_src.clkr, 4230 [NSS_PORT1_RX_DIV_CLK_SRC] = &nss_port1_rx_div_clk_src.clkr, 4231 [NSS_PORT1_TX_DIV_CLK_SRC] = &nss_port1_tx_div_clk_src.clkr, 4232 [NSS_PORT2_RX_DIV_CLK_SRC] = &nss_port2_rx_div_clk_src.clkr, 4233 [NSS_PORT2_TX_DIV_CLK_SRC] = &nss_port2_tx_div_clk_src.clkr, 4234 [NSS_PORT3_RX_DIV_CLK_SRC] = &nss_port3_rx_div_clk_src.clkr, 4235 [NSS_PORT3_TX_DIV_CLK_SRC] = &nss_port3_tx_div_clk_src.clkr, 4236 [NSS_PORT4_RX_DIV_CLK_SRC] = &nss_port4_rx_div_clk_src.clkr, 4237 [NSS_PORT4_TX_DIV_CLK_SRC] = &nss_port4_tx_div_clk_src.clkr, 4238 [NSS_UBI0_CLK_SRC] = &nss_ubi0_clk_src.clkr, 4239 [ADSS_PWM_CLK_SRC] = &adss_pwm_clk_src.clkr, 4240 [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr, 4241 [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr, 4242 [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr, 4243 [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr, 4244 [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr, 4245 [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr, 4246 [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr, 4247 [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr, 4248 [BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr, 4249 [BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr, 4250 [BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr, 4251 [BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr, 4252 [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr, 4253 [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr, 4254 [BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr, 4255 [BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr, 4256 [BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr, 4257 [BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr, 4258 [CRYPTO_CLK_SRC] = &crypto_clk_src.clkr, 4259 [GP1_CLK_SRC] = &gp1_clk_src.clkr, 4260 [GP2_CLK_SRC] = &gp2_clk_src.clkr, 4261 [GP3_CLK_SRC] = &gp3_clk_src.clkr, 4262 [NSS_UBI0_DIV_CLK_SRC] = &nss_ubi0_div_clk_src.clkr, 4263 [PCIE0_AUX_CLK_SRC] = &pcie0_aux_clk_src.clkr, 4264 [PCIE0_PIPE_CLK_SRC] = &pcie0_pipe_clk_src.clkr, 4265 [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr, 4266 [USB0_AUX_CLK_SRC] = &usb0_aux_clk_src.clkr, 4267 [USB0_MOCK_UTMI_CLK_SRC] = &usb0_mock_utmi_clk_src.clkr, 4268 [USB0_PIPE_CLK_SRC] = &usb0_pipe_clk_src.clkr, 4269 [USB1_MOCK_UTMI_CLK_SRC] = &usb1_mock_utmi_clk_src.clkr, 4270 [GCC_ADSS_PWM_CLK] = &gcc_adss_pwm_clk.clkr, 4271 [GCC_APSS_AHB_CLK] = &gcc_apss_ahb_clk.clkr, 4272 [GCC_APSS_AXI_CLK] = &gcc_apss_axi_clk.clkr, 4273 [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr, 4274 [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr, 4275 [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr, 4276 [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr, 4277 [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr, 4278 [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr, 4279 [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr, 4280 [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr, 4281 [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr, 4282 [GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr, 4283 [GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr, 4284 [GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr, 4285 [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr, 4286 [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr, 4287 [GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr, 4288 [GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr, 4289 [GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr, 4290 [GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr, 4291 [GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr, 4292 [GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr, 4293 [GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr, 4294 [GCC_XO_CLK] = &gcc_xo_clk.clkr, 4295 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr, 4296 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr, 4297 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr, 4298 [GCC_MDIO_AHB_CLK] = &gcc_mdio_ahb_clk.clkr, 4299 [GCC_CRYPTO_PPE_CLK] = &gcc_crypto_ppe_clk.clkr, 4300 [GCC_NSS_CE_APB_CLK] = &gcc_nss_ce_apb_clk.clkr, 4301 [GCC_NSS_CE_AXI_CLK] = &gcc_nss_ce_axi_clk.clkr, 4302 [GCC_NSS_CFG_CLK] = &gcc_nss_cfg_clk.clkr, 4303 [GCC_NSS_CRYPTO_CLK] = &gcc_nss_crypto_clk.clkr, 4304 [GCC_NSS_CSR_CLK] = &gcc_nss_csr_clk.clkr, 4305 [GCC_NSS_EDMA_CFG_CLK] = &gcc_nss_edma_cfg_clk.clkr, 4306 [GCC_NSS_EDMA_CLK] = &gcc_nss_edma_clk.clkr, 4307 [GCC_NSS_NOC_CLK] = &gcc_nss_noc_clk.clkr, 4308 [GCC_UBI0_UTCM_CLK] = &gcc_ubi0_utcm_clk.clkr, 4309 [GCC_SNOC_NSSNOC_CLK] = &gcc_snoc_nssnoc_clk.clkr, 4310 [GCC_NSS_PORT1_RX_CLK] = &gcc_nss_port1_rx_clk.clkr, 4311 [GCC_NSS_PORT1_TX_CLK] = &gcc_nss_port1_tx_clk.clkr, 4312 [GCC_NSS_PORT2_RX_CLK] = &gcc_nss_port2_rx_clk.clkr, 4313 [GCC_NSS_PORT2_TX_CLK] = &gcc_nss_port2_tx_clk.clkr, 4314 [GCC_NSS_PORT3_RX_CLK] = &gcc_nss_port3_rx_clk.clkr, 4315 [GCC_NSS_PORT3_TX_CLK] = &gcc_nss_port3_tx_clk.clkr, 4316 [GCC_NSS_PORT4_RX_CLK] = &gcc_nss_port4_rx_clk.clkr, 4317 [GCC_NSS_PORT4_TX_CLK] = &gcc_nss_port4_tx_clk.clkr, 4318 [GCC_NSS_PORT5_RX_CLK] = &gcc_nss_port5_rx_clk.clkr, 4319 [GCC_NSS_PORT5_TX_CLK] = &gcc_nss_port5_tx_clk.clkr, 4320 [GCC_NSS_PPE_CFG_CLK] = &gcc_nss_ppe_cfg_clk.clkr, 4321 [GCC_NSS_PPE_CLK] = &gcc_nss_ppe_clk.clkr, 4322 [GCC_NSS_PPE_IPE_CLK] = &gcc_nss_ppe_ipe_clk.clkr, 4323 [GCC_NSS_PTP_REF_CLK] = &gcc_nss_ptp_ref_clk.clkr, 4324 [GCC_NSSNOC_CE_APB_CLK] = &gcc_nssnoc_ce_apb_clk.clkr, 4325 [GCC_NSSNOC_CE_AXI_CLK] = &gcc_nssnoc_ce_axi_clk.clkr, 4326 [GCC_NSSNOC_CRYPTO_CLK] = &gcc_nssnoc_crypto_clk.clkr, 4327 [GCC_NSSNOC_PPE_CFG_CLK] = &gcc_nssnoc_ppe_cfg_clk.clkr, 4328 [GCC_NSSNOC_PPE_CLK] = &gcc_nssnoc_ppe_clk.clkr, 4329 [GCC_NSSNOC_QOSGEN_REF_CLK] = &gcc_nssnoc_qosgen_ref_clk.clkr, 4330 [GCC_NSSNOC_SNOC_CLK] = &gcc_nssnoc_snoc_clk.clkr, 4331 [GCC_NSSNOC_TIMEOUT_REF_CLK] = &gcc_nssnoc_timeout_ref_clk.clkr, 4332 [GCC_NSSNOC_UBI0_AHB_CLK] = &gcc_nssnoc_ubi0_ahb_clk.clkr, 4333 [GCC_PORT1_MAC_CLK] = &gcc_port1_mac_clk.clkr, 4334 [GCC_PORT2_MAC_CLK] = &gcc_port2_mac_clk.clkr, 4335 [GCC_PORT3_MAC_CLK] = &gcc_port3_mac_clk.clkr, 4336 [GCC_PORT4_MAC_CLK] = &gcc_port4_mac_clk.clkr, 4337 [GCC_PORT5_MAC_CLK] = &gcc_port5_mac_clk.clkr, 4338 [GCC_UBI0_AHB_CLK] = &gcc_ubi0_ahb_clk.clkr, 4339 [GCC_UBI0_AXI_CLK] = &gcc_ubi0_axi_clk.clkr, 4340 [GCC_UBI0_NC_AXI_CLK] = &gcc_ubi0_nc_axi_clk.clkr, 4341 [GCC_UBI0_CORE_CLK] = &gcc_ubi0_core_clk.clkr, 4342 [GCC_PCIE0_AHB_CLK] = &gcc_pcie0_ahb_clk.clkr, 4343 [GCC_PCIE0_AUX_CLK] = &gcc_pcie0_aux_clk.clkr, 4344 [GCC_PCIE0_AXI_M_CLK] = &gcc_pcie0_axi_m_clk.clkr, 4345 [GCC_PCIE0_AXI_S_CLK] = &gcc_pcie0_axi_s_clk.clkr, 4346 [GCC_SYS_NOC_PCIE0_AXI_CLK] = &gcc_sys_noc_pcie0_axi_clk.clkr, 4347 [GCC_PCIE0_PIPE_CLK] = &gcc_pcie0_pipe_clk.clkr, 4348 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr, 4349 [GCC_QDSS_DAP_CLK] = &gcc_qdss_dap_clk.clkr, 4350 [GCC_QPIC_AHB_CLK] = &gcc_qpic_ahb_clk.clkr, 4351 [GCC_QPIC_CLK] = &gcc_qpic_clk.clkr, 4352 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr, 4353 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr, 4354 [GCC_UNIPHY0_AHB_CLK] = &gcc_uniphy0_ahb_clk.clkr, 4355 [GCC_UNIPHY0_PORT1_RX_CLK] = &gcc_uniphy0_port1_rx_clk.clkr, 4356 [GCC_UNIPHY0_PORT1_TX_CLK] = &gcc_uniphy0_port1_tx_clk.clkr, 4357 [GCC_UNIPHY0_PORT2_RX_CLK] = &gcc_uniphy0_port2_rx_clk.clkr, 4358 [GCC_UNIPHY0_PORT2_TX_CLK] = &gcc_uniphy0_port2_tx_clk.clkr, 4359 [GCC_UNIPHY0_PORT3_RX_CLK] = &gcc_uniphy0_port3_rx_clk.clkr, 4360 [GCC_UNIPHY0_PORT3_TX_CLK] = &gcc_uniphy0_port3_tx_clk.clkr, 4361 [GCC_UNIPHY0_PORT4_RX_CLK] = &gcc_uniphy0_port4_rx_clk.clkr, 4362 [GCC_UNIPHY0_PORT4_TX_CLK] = &gcc_uniphy0_port4_tx_clk.clkr, 4363 [GCC_UNIPHY0_PORT5_RX_CLK] = &gcc_uniphy0_port5_rx_clk.clkr, 4364 [GCC_UNIPHY0_PORT5_TX_CLK] = &gcc_uniphy0_port5_tx_clk.clkr, 4365 [GCC_UNIPHY0_SYS_CLK] = &gcc_uniphy0_sys_clk.clkr, 4366 [GCC_UNIPHY1_AHB_CLK] = &gcc_uniphy1_ahb_clk.clkr, 4367 [GCC_UNIPHY1_PORT5_RX_CLK] = &gcc_uniphy1_port5_rx_clk.clkr, 4368 [GCC_UNIPHY1_PORT5_TX_CLK] = &gcc_uniphy1_port5_tx_clk.clkr, 4369 [GCC_UNIPHY1_SYS_CLK] = &gcc_uniphy1_sys_clk.clkr, 4370 [GCC_USB0_AUX_CLK] = &gcc_usb0_aux_clk.clkr, 4371 [GCC_SYS_NOC_USB0_AXI_CLK] = &gcc_sys_noc_usb0_axi_clk.clkr, 4372 [GCC_SNOC_BUS_TIMEOUT2_AHB_CLK] = &gcc_snoc_bus_timeout2_ahb_clk.clkr, 4373 [GCC_USB0_MASTER_CLK] = &gcc_usb0_master_clk.clkr, 4374 [GCC_USB0_MOCK_UTMI_CLK] = &gcc_usb0_mock_utmi_clk.clkr, 4375 [GCC_USB0_PHY_CFG_AHB_CLK] = &gcc_usb0_phy_cfg_ahb_clk.clkr, 4376 [GCC_USB0_PIPE_CLK] = &gcc_usb0_pipe_clk.clkr, 4377 [GCC_USB0_SLEEP_CLK] = &gcc_usb0_sleep_clk.clkr, 4378 [GCC_USB1_MASTER_CLK] = &gcc_usb1_master_clk.clkr, 4379 [GCC_USB1_MOCK_UTMI_CLK] = &gcc_usb1_mock_utmi_clk.clkr, 4380 [GCC_USB1_PHY_CFG_AHB_CLK] = &gcc_usb1_phy_cfg_ahb_clk.clkr, 4381 [GCC_USB1_SLEEP_CLK] = &gcc_usb1_sleep_clk.clkr, 4382 [GCC_CMN_12GPLL_AHB_CLK] = &gcc_cmn_12gpll_ahb_clk.clkr, 4383 [GCC_CMN_12GPLL_SYS_CLK] = &gcc_cmn_12gpll_sys_clk.clkr, 4384 [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr, 4385 [SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr, 4386 [GCC_DCC_CLK] = &gcc_dcc_clk.clkr, 4387 [PCIE0_RCHNG_CLK_SRC] = &pcie0_rchng_clk_src.clkr, 4388 [GCC_PCIE0_AXI_S_BRIDGE_CLK] = &gcc_pcie0_axi_s_bridge_clk.clkr, 4389 [PCIE0_RCHNG_CLK] = &gcc_pcie0_rchng_clk.clkr, 4390 [WCSS_AHB_CLK_SRC] = &wcss_ahb_clk_src.clkr, 4391 [Q6_AXI_CLK_SRC] = &q6_axi_clk_src.clkr, 4392 [RBCPR_WCSS_CLK_SRC] = &rbcpr_wcss_clk_src.clkr, 4393 [GCC_LPASS_CORE_AXIM_CLK] = &gcc_lpass_core_axim_clk.clkr, 4394 [LPASS_CORE_AXIM_CLK_SRC] = &lpass_core_axim_clk_src.clkr, 4395 [GCC_LPASS_SNOC_CFG_CLK] = &gcc_lpass_snoc_cfg_clk.clkr, 4396 [LPASS_SNOC_CFG_CLK_SRC] = &lpass_snoc_cfg_clk_src.clkr, 4397 [GCC_LPASS_Q6_AXIM_CLK] = &gcc_lpass_q6_axim_clk.clkr, 4398 [LPASS_Q6_AXIM_CLK_SRC] = &lpass_q6_axim_clk_src.clkr, 4399 [GCC_LPASS_Q6_ATBM_AT_CLK] = &gcc_lpass_q6_atbm_at_clk.clkr, 4400 [GCC_LPASS_Q6_PCLKDBG_CLK] = &gcc_lpass_q6_pclkdbg_clk.clkr, 4401 [GCC_LPASS_Q6SS_TSCTR_1TO2_CLK] = &gcc_lpass_q6ss_tsctr_1to2_clk.clkr, 4402 [GCC_LPASS_Q6SS_TRIG_CLK] = &gcc_lpass_q6ss_trig_clk.clkr, 4403 [GCC_LPASS_TBU_CLK] = &gcc_lpass_tbu_clk.clkr, 4404 [GCC_PCNOC_LPASS_CLK] = &gcc_pcnoc_lpass_clk.clkr, 4405 [GCC_MEM_NOC_UBI32_CLK] = &gcc_mem_noc_ubi32_clk.clkr, 4406 [GCC_MEM_NOC_LPASS_CLK] = &gcc_mem_noc_lpass_clk.clkr, 4407 [GCC_SNOC_LPASS_CFG_CLK] = &gcc_snoc_lpass_cfg_clk.clkr, 4408 [QDSS_STM_CLK_SRC] = &qdss_stm_clk_src.clkr, 4409 [QDSS_TRACECLKIN_CLK_SRC] = &qdss_traceclkin_clk_src.clkr, 4410 }; 4411 4412 static const struct qcom_reset_map gcc_ipq6018_resets[] = { 4413 [GCC_BLSP1_BCR] = { 0x01000, 0 }, 4414 [GCC_BLSP1_QUP1_BCR] = { 0x02000, 0 }, 4415 [GCC_BLSP1_UART1_BCR] = { 0x02038, 0 }, 4416 [GCC_BLSP1_QUP2_BCR] = { 0x03008, 0 }, 4417 [GCC_BLSP1_UART2_BCR] = { 0x03028, 0 }, 4418 [GCC_BLSP1_QUP3_BCR] = { 0x04008, 0 }, 4419 [GCC_BLSP1_UART3_BCR] = { 0x04028, 0 }, 4420 [GCC_BLSP1_QUP4_BCR] = { 0x05008, 0 }, 4421 [GCC_BLSP1_UART4_BCR] = { 0x05028, 0 }, 4422 [GCC_BLSP1_QUP5_BCR] = { 0x06008, 0 }, 4423 [GCC_BLSP1_UART5_BCR] = { 0x06028, 0 }, 4424 [GCC_BLSP1_QUP6_BCR] = { 0x07008, 0 }, 4425 [GCC_BLSP1_UART6_BCR] = { 0x07028, 0 }, 4426 [GCC_IMEM_BCR] = { 0x0e000, 0 }, 4427 [GCC_SMMU_BCR] = { 0x12000, 0 }, 4428 [GCC_APSS_TCU_BCR] = { 0x12050, 0 }, 4429 [GCC_SMMU_XPU_BCR] = { 0x12054, 0 }, 4430 [GCC_PCNOC_TBU_BCR] = { 0x12058, 0 }, 4431 [GCC_SMMU_CFG_BCR] = { 0x1208c, 0 }, 4432 [GCC_PRNG_BCR] = { 0x13000, 0 }, 4433 [GCC_BOOT_ROM_BCR] = { 0x13008, 0 }, 4434 [GCC_CRYPTO_BCR] = { 0x16000, 0 }, 4435 [GCC_WCSS_BCR] = { 0x18000, 0 }, 4436 [GCC_WCSS_Q6_BCR] = { 0x18100, 0 }, 4437 [GCC_NSS_BCR] = { 0x19000, 0 }, 4438 [GCC_SEC_CTRL_BCR] = { 0x1a000, 0 }, 4439 [GCC_ADSS_BCR] = { 0x1c000, 0 }, 4440 [GCC_DDRSS_BCR] = { 0x1e000, 0 }, 4441 [GCC_SYSTEM_NOC_BCR] = { 0x26000, 0 }, 4442 [GCC_PCNOC_BCR] = { 0x27018, 0 }, 4443 [GCC_TCSR_BCR] = { 0x28000, 0 }, 4444 [GCC_QDSS_BCR] = { 0x29000, 0 }, 4445 [GCC_DCD_BCR] = { 0x2a000, 0 }, 4446 [GCC_MSG_RAM_BCR] = { 0x2b000, 0 }, 4447 [GCC_MPM_BCR] = { 0x2c000, 0 }, 4448 [GCC_SPDM_BCR] = { 0x2f000, 0 }, 4449 [GCC_RBCPR_BCR] = { 0x33000, 0 }, 4450 [GCC_RBCPR_MX_BCR] = { 0x33014, 0 }, 4451 [GCC_TLMM_BCR] = { 0x34000, 0 }, 4452 [GCC_RBCPR_WCSS_BCR] = { 0x3a000, 0 }, 4453 [GCC_USB0_PHY_BCR] = { 0x3e034, 0 }, 4454 [GCC_USB3PHY_0_PHY_BCR] = { 0x3e03c, 0 }, 4455 [GCC_USB0_BCR] = { 0x3e070, 0 }, 4456 [GCC_USB1_BCR] = { 0x3f070, 0 }, 4457 [GCC_QUSB2_0_PHY_BCR] = { 0x4103c, 0 }, 4458 [GCC_QUSB2_1_PHY_BCR] = { 0x41040, 0 }, 4459 [GCC_SDCC1_BCR] = { 0x42000, 0 }, 4460 [GCC_SNOC_BUS_TIMEOUT0_BCR] = { 0x47000, 0 }, 4461 [GCC_SNOC_BUS_TIMEOUT1_BCR] = { 0x47008, 0 }, 4462 [GCC_SNOC_BUS_TIMEOUT2_BCR] = { 0x47010, 0 }, 4463 [GCC_PCNOC_BUS_TIMEOUT0_BCR] = { 0x48000, 0 }, 4464 [GCC_PCNOC_BUS_TIMEOUT1_BCR] = { 0x48008, 0 }, 4465 [GCC_PCNOC_BUS_TIMEOUT2_BCR] = { 0x48010, 0 }, 4466 [GCC_PCNOC_BUS_TIMEOUT3_BCR] = { 0x48018, 0 }, 4467 [GCC_PCNOC_BUS_TIMEOUT4_BCR] = { 0x48020, 0 }, 4468 [GCC_PCNOC_BUS_TIMEOUT5_BCR] = { 0x48028, 0 }, 4469 [GCC_PCNOC_BUS_TIMEOUT6_BCR] = { 0x48030, 0 }, 4470 [GCC_PCNOC_BUS_TIMEOUT7_BCR] = { 0x48038, 0 }, 4471 [GCC_PCNOC_BUS_TIMEOUT8_BCR] = { 0x48040, 0 }, 4472 [GCC_PCNOC_BUS_TIMEOUT9_BCR] = { 0x48048, 0 }, 4473 [GCC_UNIPHY0_BCR] = { 0x56000, 0 }, 4474 [GCC_UNIPHY1_BCR] = { 0x56100, 0 }, 4475 [GCC_CMN_12GPLL_BCR] = { 0x56300, 0 }, 4476 [GCC_QPIC_BCR] = { 0x57018, 0 }, 4477 [GCC_MDIO_BCR] = { 0x58000, 0 }, 4478 [GCC_WCSS_CORE_TBU_BCR] = { 0x66000, 0 }, 4479 [GCC_WCSS_Q6_TBU_BCR] = { 0x67000, 0 }, 4480 [GCC_USB0_TBU_BCR] = { 0x6a000, 0 }, 4481 [GCC_PCIE0_TBU_BCR] = { 0x6b000, 0 }, 4482 [GCC_NSS_NOC_TBU_BCR] = { 0x6e000, 0 }, 4483 [GCC_PCIE0_BCR] = { 0x75004, 0 }, 4484 [GCC_PCIE0_PHY_BCR] = { 0x75038, 0 }, 4485 [GCC_PCIE0PHY_PHY_BCR] = { 0x7503c, 0 }, 4486 [GCC_PCIE0_LINK_DOWN_BCR] = { 0x75044, 0 }, 4487 [GCC_DCC_BCR] = { 0x77000, 0 }, 4488 [GCC_APC0_VOLTAGE_DROOP_DETECTOR_BCR] = { 0x78000, 0 }, 4489 [GCC_SMMU_CATS_BCR] = { 0x7c000, 0 }, 4490 [GCC_UBI0_AXI_ARES] = { 0x68010, 0 }, 4491 [GCC_UBI0_AHB_ARES] = { 0x68010, 1 }, 4492 [GCC_UBI0_NC_AXI_ARES] = { 0x68010, 2 }, 4493 [GCC_UBI0_DBG_ARES] = { 0x68010, 3 }, 4494 [GCC_UBI0_CORE_CLAMP_ENABLE] = { 0x68010, 4 }, 4495 [GCC_UBI0_CLKRST_CLAMP_ENABLE] = { 0x68010, 5 }, 4496 [GCC_UBI0_UTCM_ARES] = { 0x68010, 6 }, 4497 [GCC_UBI0_CORE_ARES] = { 0x68010, 7 }, 4498 [GCC_NSS_CFG_ARES] = { 0x68010, 16 }, 4499 [GCC_NSS_NOC_ARES] = { 0x68010, 18 }, 4500 [GCC_NSS_CRYPTO_ARES] = { 0x68010, 19 }, 4501 [GCC_NSS_CSR_ARES] = { 0x68010, 20 }, 4502 [GCC_NSS_CE_APB_ARES] = { 0x68010, 21 }, 4503 [GCC_NSS_CE_AXI_ARES] = { 0x68010, 22 }, 4504 [GCC_NSSNOC_CE_APB_ARES] = { 0x68010, 23 }, 4505 [GCC_NSSNOC_CE_AXI_ARES] = { 0x68010, 24 }, 4506 [GCC_NSSNOC_UBI0_AHB_ARES] = { 0x68010, 25 }, 4507 [GCC_NSSNOC_SNOC_ARES] = { 0x68010, 27 }, 4508 [GCC_NSSNOC_CRYPTO_ARES] = { 0x68010, 28 }, 4509 [GCC_NSSNOC_ATB_ARES] = { 0x68010, 29 }, 4510 [GCC_NSSNOC_QOSGEN_REF_ARES] = { 0x68010, 30 }, 4511 [GCC_NSSNOC_TIMEOUT_REF_ARES] = { 0x68010, 31 }, 4512 [GCC_PCIE0_PIPE_ARES] = { 0x75040, 0 }, 4513 [GCC_PCIE0_SLEEP_ARES] = { 0x75040, 1 }, 4514 [GCC_PCIE0_CORE_STICKY_ARES] = { 0x75040, 2 }, 4515 [GCC_PCIE0_AXI_MASTER_ARES] = { 0x75040, 3 }, 4516 [GCC_PCIE0_AXI_SLAVE_ARES] = { 0x75040, 4 }, 4517 [GCC_PCIE0_AHB_ARES] = { 0x75040, 5 }, 4518 [GCC_PCIE0_AXI_MASTER_STICKY_ARES] = { 0x75040, 6 }, 4519 [GCC_PCIE0_AXI_SLAVE_STICKY_ARES] = { 0x75040, 7 }, 4520 [GCC_PPE_FULL_RESET] = { 0x68014, 0 }, 4521 [GCC_UNIPHY0_SOFT_RESET] = { 0x56004, 0 }, 4522 [GCC_UNIPHY0_XPCS_RESET] = { 0x56004, 2 }, 4523 [GCC_UNIPHY1_SOFT_RESET] = { 0x56104, 0 }, 4524 [GCC_UNIPHY1_XPCS_RESET] = { 0x56104, 2 }, 4525 [GCC_EDMA_HW_RESET] = { 0x68014, 0 }, 4526 [GCC_NSSPORT1_RESET] = { 0x68014, 0 }, 4527 [GCC_NSSPORT2_RESET] = { 0x68014, 0 }, 4528 [GCC_NSSPORT3_RESET] = { 0x68014, 0 }, 4529 [GCC_NSSPORT4_RESET] = { 0x68014, 0 }, 4530 [GCC_NSSPORT5_RESET] = { 0x68014, 0 }, 4531 [GCC_UNIPHY0_PORT1_ARES] = { 0x56004, 0 }, 4532 [GCC_UNIPHY0_PORT2_ARES] = { 0x56004, 0 }, 4533 [GCC_UNIPHY0_PORT3_ARES] = { 0x56004, 0 }, 4534 [GCC_UNIPHY0_PORT4_ARES] = { 0x56004, 0 }, 4535 [GCC_UNIPHY0_PORT5_ARES] = { 0x56004, 0 }, 4536 [GCC_UNIPHY0_PORT_4_5_RESET] = { 0x56004, 0 }, 4537 [GCC_UNIPHY0_PORT_4_RESET] = { 0x56004, 0 }, 4538 [GCC_LPASS_BCR] = {0x1F000, 0}, 4539 [GCC_UBI32_TBU_BCR] = {0x65000, 0}, 4540 [GCC_LPASS_TBU_BCR] = {0x6C000, 0}, 4541 [GCC_WCSSAON_RESET] = {0x59010, 0}, 4542 [GCC_LPASS_Q6_AXIM_ARES] = {0x1F004, 0}, 4543 [GCC_LPASS_Q6SS_TSCTR_1TO2_ARES] = {0x1F004, 1}, 4544 [GCC_LPASS_Q6SS_TRIG_ARES] = {0x1F004, 2}, 4545 [GCC_LPASS_Q6_ATBM_AT_ARES] = {0x1F004, 3}, 4546 [GCC_LPASS_Q6_PCLKDBG_ARES] = {0x1F004, 4}, 4547 [GCC_LPASS_CORE_AXIM_ARES] = {0x1F004, 5}, 4548 [GCC_LPASS_SNOC_CFG_ARES] = {0x1F004, 6}, 4549 [GCC_WCSS_DBG_ARES] = {0x59008, 0}, 4550 [GCC_WCSS_ECAHB_ARES] = {0x59008, 1}, 4551 [GCC_WCSS_ACMT_ARES] = {0x59008, 2}, 4552 [GCC_WCSS_DBG_BDG_ARES] = {0x59008, 3}, 4553 [GCC_WCSS_AHB_S_ARES] = {0x59008, 4}, 4554 [GCC_WCSS_AXI_M_ARES] = {0x59008, 5}, 4555 [GCC_Q6SS_DBG_ARES] = {0x59110, 0}, 4556 [GCC_Q6_AHB_S_ARES] = {0x59110, 1}, 4557 [GCC_Q6_AHB_ARES] = {0x59110, 2}, 4558 [GCC_Q6_AXIM2_ARES] = {0x59110, 3}, 4559 [GCC_Q6_AXIM_ARES] = {0x59110, 4}, 4560 }; 4561 4562 static const struct of_device_id gcc_ipq6018_match_table[] = { 4563 { .compatible = "qcom,gcc-ipq6018" }, 4564 { } 4565 }; 4566 MODULE_DEVICE_TABLE(of, gcc_ipq6018_match_table); 4567 4568 static const struct regmap_config gcc_ipq6018_regmap_config = { 4569 .reg_bits = 32, 4570 .reg_stride = 4, 4571 .val_bits = 32, 4572 .max_register = 0x7fffc, 4573 .fast_io = true, 4574 }; 4575 4576 static const struct qcom_cc_desc gcc_ipq6018_desc = { 4577 .config = &gcc_ipq6018_regmap_config, 4578 .clks = gcc_ipq6018_clks, 4579 .num_clks = ARRAY_SIZE(gcc_ipq6018_clks), 4580 .resets = gcc_ipq6018_resets, 4581 .num_resets = ARRAY_SIZE(gcc_ipq6018_resets), 4582 .clk_hws = gcc_ipq6018_hws, 4583 .num_clk_hws = ARRAY_SIZE(gcc_ipq6018_hws), 4584 }; 4585 4586 static int gcc_ipq6018_probe(struct platform_device *pdev) 4587 { 4588 struct regmap *regmap; 4589 4590 regmap = qcom_cc_map(pdev, &gcc_ipq6018_desc); 4591 if (IS_ERR(regmap)) 4592 return PTR_ERR(regmap); 4593 4594 /* Disable SW_COLLAPSE for USB0 GDSCR */ 4595 regmap_update_bits(regmap, 0x3e078, BIT(0), 0x0); 4596 /* Enable SW_OVERRIDE for USB0 GDSCR */ 4597 regmap_update_bits(regmap, 0x3e078, BIT(2), BIT(2)); 4598 /* Disable SW_COLLAPSE for USB1 GDSCR */ 4599 regmap_update_bits(regmap, 0x3f078, BIT(0), 0x0); 4600 /* Enable SW_OVERRIDE for USB1 GDSCR */ 4601 regmap_update_bits(regmap, 0x3f078, BIT(2), BIT(2)); 4602 4603 /* SW Workaround for UBI Huyara PLL */ 4604 regmap_update_bits(regmap, 0x2501c, BIT(26), BIT(26)); 4605 4606 clk_alpha_pll_configure(&ubi32_pll_main, regmap, &ubi32_pll_config); 4607 4608 clk_alpha_pll_configure(&nss_crypto_pll_main, regmap, 4609 &nss_crypto_pll_config); 4610 4611 return qcom_cc_really_probe(pdev, &gcc_ipq6018_desc, regmap); 4612 } 4613 4614 static struct platform_driver gcc_ipq6018_driver = { 4615 .probe = gcc_ipq6018_probe, 4616 .driver = { 4617 .name = "qcom,gcc-ipq6018", 4618 .of_match_table = gcc_ipq6018_match_table, 4619 }, 4620 }; 4621 4622 static int __init gcc_ipq6018_init(void) 4623 { 4624 return platform_driver_register(&gcc_ipq6018_driver); 4625 } 4626 core_initcall(gcc_ipq6018_init); 4627 4628 static void __exit gcc_ipq6018_exit(void) 4629 { 4630 platform_driver_unregister(&gcc_ipq6018_driver); 4631 } 4632 module_exit(gcc_ipq6018_exit); 4633 4634 MODULE_DESCRIPTION("Qualcomm Technologies, Inc. GCC IPQ6018 Driver"); 4635 MODULE_LICENSE("GPL v2"); 4636