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