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