1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Copyright (c) 2018, The Linux Foundation. All rights reserved. 4 */ 5 6 #include <linux/kernel.h> 7 #include <linux/platform_device.h> 8 #include <linux/module.h> 9 #include <linux/of.h> 10 #include <linux/clk-provider.h> 11 #include <linux/regmap.h> 12 #include <linux/reset-controller.h> 13 14 #include <dt-bindings/clock/qcom,gcc-qcs404.h> 15 16 #include "clk-alpha-pll.h" 17 #include "clk-branch.h" 18 #include "clk-pll.h" 19 #include "clk-rcg.h" 20 #include "clk-regmap.h" 21 #include "common.h" 22 #include "gdsc.h" 23 #include "reset.h" 24 25 enum { 26 DT_XO, 27 DT_SLEEP_CLK, 28 DT_PCIE_0_PIPE_CLK, 29 DT_DSI0_PHY_PLL_OUT_DSICLK, 30 DT_DSI0_PHY_PLL_OUT_BYTECLK, 31 DT_HDMI_PHY_PLL_CLK, 32 }; 33 34 enum { 35 P_DSI0_PHY_PLL_OUT_BYTECLK, 36 P_DSI0_PHY_PLL_OUT_DSICLK, 37 P_GPLL0_OUT_MAIN, 38 P_GPLL1_OUT_MAIN, 39 P_GPLL3_OUT_MAIN, 40 P_GPLL4_OUT_MAIN, 41 P_GPLL6_OUT_AUX, 42 P_HDMI_PHY_PLL_CLK, 43 P_PCIE_0_PIPE_CLK, 44 P_SLEEP_CLK, 45 P_XO, 46 }; 47 48 static const struct parent_map gcc_parent_map_1[] = { 49 { P_XO, 0 }, 50 }; 51 52 static const struct clk_parent_data gcc_parent_data_1[] = { 53 { .index = DT_XO, .name = "xo-board" }, 54 }; 55 56 static struct clk_fixed_factor cxo = { 57 .mult = 1, 58 .div = 1, 59 .hw.init = &(struct clk_init_data){ 60 .name = "cxo", 61 .parent_data = gcc_parent_data_1, 62 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 63 .ops = &clk_fixed_factor_ops, 64 }, 65 }; 66 67 static struct clk_alpha_pll gpll0_sleep_clk_src = { 68 .offset = 0x21000, 69 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 70 .clkr = { 71 .enable_reg = 0x45008, 72 .enable_mask = BIT(23), 73 .enable_is_inverted = true, 74 .hw.init = &(struct clk_init_data){ 75 .name = "gpll0_sleep_clk_src", 76 .parent_data = gcc_parent_data_1, 77 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 78 .ops = &clk_alpha_pll_ops, 79 }, 80 }, 81 }; 82 83 static struct clk_alpha_pll gpll0_out_main = { 84 .offset = 0x21000, 85 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 86 .flags = SUPPORTS_FSM_MODE, 87 .clkr = { 88 .enable_reg = 0x45000, 89 .enable_mask = BIT(0), 90 .hw.init = &(struct clk_init_data){ 91 .name = "gpll0_out_main", 92 .parent_data = gcc_parent_data_1, 93 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 94 .ops = &clk_alpha_pll_ops, 95 }, 96 }, 97 }; 98 99 static struct clk_alpha_pll gpll0_ao_out_main = { 100 .offset = 0x21000, 101 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 102 .flags = SUPPORTS_FSM_MODE, 103 .clkr = { 104 .enable_reg = 0x45000, 105 .enable_mask = BIT(0), 106 .hw.init = &(struct clk_init_data){ 107 .name = "gpll0_ao_out_main", 108 .parent_data = gcc_parent_data_1, 109 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 110 .flags = CLK_IS_CRITICAL, 111 .ops = &clk_alpha_pll_fixed_ops, 112 }, 113 }, 114 }; 115 116 static struct clk_alpha_pll gpll1_out_main = { 117 .offset = 0x20000, 118 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 119 .clkr = { 120 .enable_reg = 0x45000, 121 .enable_mask = BIT(1), 122 .hw.init = &(struct clk_init_data){ 123 .name = "gpll1_out_main", 124 .parent_data = gcc_parent_data_1, 125 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 126 .ops = &clk_alpha_pll_ops, 127 }, 128 }, 129 }; 130 131 /* 930MHz configuration */ 132 static const struct alpha_pll_config gpll3_config = { 133 .l = 48, 134 .alpha_hi = 0x70, 135 .alpha = 0x0, 136 .alpha_en_mask = BIT(24), 137 .post_div_mask = 0xf << 8, 138 .post_div_val = 0x1 << 8, 139 .vco_mask = 0x3 << 20, 140 .main_output_mask = 0x1, 141 .config_ctl_val = 0x4001055b, 142 }; 143 144 static const struct pll_vco gpll3_vco[] = { 145 { 700000000, 1400000000, 0 }, 146 }; 147 148 static struct clk_alpha_pll gpll3_out_main = { 149 .offset = 0x22000, 150 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 151 .vco_table = gpll3_vco, 152 .num_vco = ARRAY_SIZE(gpll3_vco), 153 .clkr = { 154 .hw.init = &(struct clk_init_data){ 155 .name = "gpll3_out_main", 156 .parent_data = gcc_parent_data_1, 157 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 158 .ops = &clk_alpha_pll_ops, 159 }, 160 }, 161 }; 162 163 static struct clk_alpha_pll gpll4_out_main = { 164 .offset = 0x24000, 165 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 166 .clkr = { 167 .enable_reg = 0x45000, 168 .enable_mask = BIT(5), 169 .hw.init = &(struct clk_init_data){ 170 .name = "gpll4_out_main", 171 .parent_data = gcc_parent_data_1, 172 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 173 .ops = &clk_alpha_pll_ops, 174 }, 175 }, 176 }; 177 178 static struct clk_pll gpll6 = { 179 .l_reg = 0x37004, 180 .m_reg = 0x37008, 181 .n_reg = 0x3700C, 182 .config_reg = 0x37014, 183 .mode_reg = 0x37000, 184 .status_reg = 0x3701C, 185 .status_bit = 17, 186 .clkr.hw.init = &(struct clk_init_data){ 187 .name = "gpll6", 188 .parent_data = gcc_parent_data_1, 189 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 190 .ops = &clk_pll_ops, 191 }, 192 }; 193 194 static struct clk_regmap gpll6_out_aux = { 195 .enable_reg = 0x45000, 196 .enable_mask = BIT(7), 197 .hw.init = &(struct clk_init_data){ 198 .name = "gpll6_out_aux", 199 .parent_hws = (const struct clk_hw*[]) { 200 &gpll6.clkr.hw, 201 }, 202 .num_parents = 1, 203 .ops = &clk_pll_vote_ops, 204 }, 205 }; 206 207 static const struct parent_map gcc_parent_map_0[] = { 208 { P_XO, 0 }, 209 { P_GPLL0_OUT_MAIN, 1 }, 210 }; 211 212 static const struct clk_parent_data gcc_parent_data_0[] = { 213 { .index = DT_XO, .name = "xo-board" }, 214 { .hw = &gpll0_out_main.clkr.hw }, 215 }; 216 217 static const struct clk_parent_data gcc_parent_data_ao_0[] = { 218 { .index = DT_XO, .name = "xo-board" }, 219 { .hw = &gpll0_ao_out_main.clkr.hw }, 220 }; 221 222 static const struct parent_map gcc_parent_map_2[] = { 223 { P_XO, 0 }, 224 { P_GPLL0_OUT_MAIN, 1 }, 225 { P_GPLL6_OUT_AUX, 2 }, 226 { P_SLEEP_CLK, 6 }, 227 }; 228 229 static const struct clk_parent_data gcc_parent_data_2[] = { 230 { .index = DT_XO, .name = "xo-board" }, 231 { .hw = &gpll0_out_main.clkr.hw }, 232 { .hw = &gpll6_out_aux.hw }, 233 { .index = DT_SLEEP_CLK, .name = "sleep_clk" }, 234 }; 235 236 static const struct parent_map gcc_parent_map_3[] = { 237 { P_XO, 0 }, 238 { P_GPLL0_OUT_MAIN, 1 }, 239 { P_GPLL6_OUT_AUX, 2 }, 240 }; 241 242 static const struct clk_parent_data gcc_parent_data_3[] = { 243 { .index = DT_XO, .name = "xo-board" }, 244 { .hw = &gpll0_out_main.clkr.hw }, 245 { .hw = &gpll6_out_aux.hw }, 246 }; 247 248 static const struct parent_map gcc_parent_map_4[] = { 249 { P_XO, 0 }, 250 { P_GPLL1_OUT_MAIN, 1 }, 251 }; 252 253 static const struct clk_parent_data gcc_parent_data_4[] = { 254 { .index = DT_XO, .name = "xo-board" }, 255 { .hw = &gpll1_out_main.clkr.hw }, 256 }; 257 258 static const struct parent_map gcc_parent_map_5[] = { 259 { P_XO, 0 }, 260 { P_DSI0_PHY_PLL_OUT_BYTECLK, 1 }, 261 }; 262 263 static const struct clk_parent_data gcc_parent_data_5[] = { 264 { .index = DT_XO, .name = "xo-board" }, 265 { .index = DT_DSI0_PHY_PLL_OUT_BYTECLK, .name = "dsi0pllbyte" }, 266 }; 267 268 static const struct parent_map gcc_parent_map_6[] = { 269 { P_XO, 0 }, 270 { P_DSI0_PHY_PLL_OUT_BYTECLK, 2 }, 271 }; 272 273 static const struct clk_parent_data gcc_parent_data_6[] = { 274 { .index = DT_XO, .name = "xo-board" }, 275 { .index = DT_DSI0_PHY_PLL_OUT_BYTECLK, .name = "dsi0pllbyte" }, 276 }; 277 278 static const struct parent_map gcc_parent_map_7[] = { 279 { P_XO, 0 }, 280 { P_GPLL0_OUT_MAIN, 1 }, 281 { P_GPLL3_OUT_MAIN, 2 }, 282 { P_GPLL6_OUT_AUX, 3 }, 283 }; 284 285 static const struct clk_parent_data gcc_parent_data_7[] = { 286 { .index = DT_XO, .name = "xo-board" }, 287 { .hw = &gpll0_out_main.clkr.hw }, 288 { .hw = &gpll3_out_main.clkr.hw }, 289 { .hw = &gpll6_out_aux.hw }, 290 }; 291 292 static const struct parent_map gcc_parent_map_8[] = { 293 { P_XO, 0 }, 294 { P_HDMI_PHY_PLL_CLK, 1 }, 295 }; 296 297 static const struct clk_parent_data gcc_parent_data_8[] = { 298 { .index = DT_XO, .name = "xo-board" }, 299 { .index = DT_HDMI_PHY_PLL_CLK, .name = "hdmi_pll" }, 300 }; 301 302 static const struct parent_map gcc_parent_map_9[] = { 303 { P_XO, 0 }, 304 { P_GPLL0_OUT_MAIN, 1 }, 305 { P_DSI0_PHY_PLL_OUT_DSICLK, 2 }, 306 { P_GPLL6_OUT_AUX, 3 }, 307 }; 308 309 static const struct clk_parent_data gcc_parent_data_9[] = { 310 { .index = DT_XO, .name = "xo-board" }, 311 { .hw = &gpll0_out_main.clkr.hw }, 312 { .index = DT_DSI0_PHY_PLL_OUT_DSICLK, .name = "dsi0pll" }, 313 { .hw = &gpll6_out_aux.hw }, 314 }; 315 316 static const struct parent_map gcc_parent_map_10[] = { 317 { P_XO, 0 }, 318 { P_SLEEP_CLK, 1 }, 319 }; 320 321 static const struct clk_parent_data gcc_parent_data_10[] = { 322 { .index = DT_XO, .name = "xo-board" }, 323 { .index = DT_SLEEP_CLK, .name = "sleep_clk" }, 324 }; 325 326 static const struct parent_map gcc_parent_map_11[] = { 327 { P_XO, 0 }, 328 { P_PCIE_0_PIPE_CLK, 1 }, 329 }; 330 331 static const struct clk_parent_data gcc_parent_data_11[] = { 332 { .index = DT_XO, .name = "xo-board" }, 333 { .fw_name = "pcie_0_pipe_clk", .name = "pcie_0_pipe_clk" }, 334 }; 335 336 static const struct parent_map gcc_parent_map_12[] = { 337 { P_XO, 0 }, 338 { P_DSI0_PHY_PLL_OUT_DSICLK, 1 }, 339 }; 340 341 static const struct clk_parent_data gcc_parent_data_12[] = { 342 { .index = DT_XO, .name = "xo-board" }, 343 { .index = DT_DSI0_PHY_PLL_OUT_DSICLK, .name = "dsi0pll" }, 344 }; 345 346 static const struct parent_map gcc_parent_map_13[] = { 347 { P_XO, 0 }, 348 { P_GPLL0_OUT_MAIN, 1 }, 349 { P_GPLL4_OUT_MAIN, 2 }, 350 { P_GPLL6_OUT_AUX, 3 }, 351 }; 352 353 static const struct clk_parent_data gcc_parent_data_13[] = { 354 { .index = DT_XO, .name = "xo-board" }, 355 { .hw = &gpll0_out_main.clkr.hw }, 356 { .hw = &gpll4_out_main.clkr.hw }, 357 { .hw = &gpll6_out_aux.hw }, 358 }; 359 360 static const struct parent_map gcc_parent_map_14[] = { 361 { P_XO, 0 }, 362 { P_GPLL0_OUT_MAIN, 1 }, 363 }; 364 365 static const struct clk_parent_data gcc_parent_data_14[] = { 366 { .index = DT_XO, .name = "xo-board" }, 367 { .hw = &gpll0_out_main.clkr.hw }, 368 }; 369 370 static const struct parent_map gcc_parent_map_15[] = { 371 { P_XO, 0 }, 372 }; 373 374 static const struct clk_parent_data gcc_parent_data_15[] = { 375 { .index = DT_XO, .name = "xo-board" }, 376 }; 377 378 static const struct parent_map gcc_parent_map_16[] = { 379 { P_XO, 0 }, 380 { P_GPLL0_OUT_MAIN, 1 }, 381 }; 382 383 static const struct clk_parent_data gcc_parent_data_16[] = { 384 { .index = DT_XO, .name = "xo-board" }, 385 { .hw = &gpll0_out_main.clkr.hw }, 386 }; 387 388 static const struct freq_tbl ftbl_apss_ahb_clk_src[] = { 389 F(19200000, P_XO, 1, 0, 0), 390 F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0), 391 F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0), 392 F(133333333, P_GPLL0_OUT_MAIN, 6, 0, 0), 393 { } 394 }; 395 396 static struct clk_rcg2 apss_ahb_clk_src = { 397 .cmd_rcgr = 0x46000, 398 .mnd_width = 0, 399 .hid_width = 5, 400 .parent_map = gcc_parent_map_0, 401 .freq_tbl = ftbl_apss_ahb_clk_src, 402 .clkr.hw.init = &(struct clk_init_data){ 403 .name = "apss_ahb_clk_src", 404 .parent_data = gcc_parent_data_ao_0, 405 .num_parents = ARRAY_SIZE(gcc_parent_data_ao_0), 406 .flags = CLK_IS_CRITICAL, 407 .ops = &clk_rcg2_ops, 408 }, 409 }; 410 411 static const struct freq_tbl ftbl_blsp1_qup0_i2c_apps_clk_src[] = { 412 F(19200000, P_XO, 1, 0, 0), 413 F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0), 414 { } 415 }; 416 417 static struct clk_rcg2 blsp1_qup0_i2c_apps_clk_src = { 418 .cmd_rcgr = 0x602c, 419 .mnd_width = 0, 420 .hid_width = 5, 421 .parent_map = gcc_parent_map_0, 422 .freq_tbl = ftbl_blsp1_qup0_i2c_apps_clk_src, 423 .clkr.hw.init = &(struct clk_init_data){ 424 .name = "blsp1_qup0_i2c_apps_clk_src", 425 .parent_data = gcc_parent_data_0, 426 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 427 .ops = &clk_rcg2_ops, 428 }, 429 }; 430 431 static const struct freq_tbl ftbl_blsp1_qup0_spi_apps_clk_src[] = { 432 F(960000, P_XO, 10, 1, 2), 433 F(4800000, P_XO, 4, 0, 0), 434 F(9600000, P_XO, 2, 0, 0), 435 F(16000000, P_GPLL0_OUT_MAIN, 10, 1, 5), 436 F(19200000, P_XO, 1, 0, 0), 437 F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2), 438 F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0), 439 { } 440 }; 441 442 static struct clk_rcg2 blsp1_qup0_spi_apps_clk_src = { 443 .cmd_rcgr = 0x6034, 444 .mnd_width = 8, 445 .hid_width = 5, 446 .parent_map = gcc_parent_map_0, 447 .freq_tbl = ftbl_blsp1_qup0_spi_apps_clk_src, 448 .clkr.hw.init = &(struct clk_init_data){ 449 .name = "blsp1_qup0_spi_apps_clk_src", 450 .parent_data = gcc_parent_data_0, 451 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 452 .ops = &clk_rcg2_ops, 453 }, 454 }; 455 456 static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = { 457 .cmd_rcgr = 0x200c, 458 .mnd_width = 0, 459 .hid_width = 5, 460 .parent_map = gcc_parent_map_0, 461 .freq_tbl = ftbl_blsp1_qup0_i2c_apps_clk_src, 462 .clkr.hw.init = &(struct clk_init_data){ 463 .name = "blsp1_qup1_i2c_apps_clk_src", 464 .parent_data = gcc_parent_data_0, 465 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 466 .ops = &clk_rcg2_ops, 467 }, 468 }; 469 470 static const struct freq_tbl ftbl_blsp1_qup1_spi_apps_clk_src[] = { 471 F(960000, P_XO, 10, 1, 2), 472 F(4800000, P_XO, 4, 0, 0), 473 F(9600000, P_XO, 2, 0, 0), 474 F(10480000, P_GPLL0_OUT_MAIN, 1, 3, 229), 475 F(16000000, P_GPLL0_OUT_MAIN, 10, 1, 5), 476 F(19200000, P_XO, 1, 0, 0), 477 F(20961000, P_GPLL0_OUT_MAIN, 1, 6, 229), 478 { } 479 }; 480 481 static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = { 482 .cmd_rcgr = 0x2024, 483 .mnd_width = 8, 484 .hid_width = 5, 485 .parent_map = gcc_parent_map_0, 486 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 487 .clkr.hw.init = &(struct clk_init_data){ 488 .name = "blsp1_qup1_spi_apps_clk_src", 489 .parent_data = gcc_parent_data_0, 490 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 491 .ops = &clk_rcg2_ops, 492 }, 493 }; 494 495 static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = { 496 .cmd_rcgr = 0x3000, 497 .mnd_width = 0, 498 .hid_width = 5, 499 .parent_map = gcc_parent_map_0, 500 .freq_tbl = ftbl_blsp1_qup0_i2c_apps_clk_src, 501 .clkr.hw.init = &(struct clk_init_data){ 502 .name = "blsp1_qup2_i2c_apps_clk_src", 503 .parent_data = gcc_parent_data_0, 504 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 505 .ops = &clk_rcg2_ops, 506 }, 507 }; 508 509 static const struct freq_tbl ftbl_blsp1_qup2_spi_apps_clk_src[] = { 510 F(960000, P_XO, 10, 1, 2), 511 F(4800000, P_XO, 4, 0, 0), 512 F(9600000, P_XO, 2, 0, 0), 513 F(15000000, P_GPLL0_OUT_MAIN, 1, 3, 160), 514 F(16000000, P_GPLL0_OUT_MAIN, 10, 1, 5), 515 F(19200000, P_XO, 1, 0, 0), 516 F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2), 517 F(30000000, P_GPLL0_OUT_MAIN, 1, 3, 80), 518 { } 519 }; 520 521 static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = { 522 .cmd_rcgr = 0x3014, 523 .mnd_width = 8, 524 .hid_width = 5, 525 .parent_map = gcc_parent_map_0, 526 .freq_tbl = ftbl_blsp1_qup2_spi_apps_clk_src, 527 .clkr.hw.init = &(struct clk_init_data){ 528 .name = "blsp1_qup2_spi_apps_clk_src", 529 .parent_data = gcc_parent_data_0, 530 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 531 .ops = &clk_rcg2_ops, 532 }, 533 }; 534 535 static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = { 536 .cmd_rcgr = 0x4000, 537 .mnd_width = 0, 538 .hid_width = 5, 539 .parent_map = gcc_parent_map_0, 540 .freq_tbl = ftbl_blsp1_qup0_i2c_apps_clk_src, 541 .clkr.hw.init = &(struct clk_init_data){ 542 .name = "blsp1_qup3_i2c_apps_clk_src", 543 .parent_data = gcc_parent_data_0, 544 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 545 .ops = &clk_rcg2_ops, 546 }, 547 }; 548 549 static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = { 550 .cmd_rcgr = 0x4024, 551 .mnd_width = 8, 552 .hid_width = 5, 553 .parent_map = gcc_parent_map_0, 554 .freq_tbl = ftbl_blsp1_qup0_spi_apps_clk_src, 555 .clkr.hw.init = &(struct clk_init_data){ 556 .name = "blsp1_qup3_spi_apps_clk_src", 557 .parent_data = gcc_parent_data_0, 558 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 559 .ops = &clk_rcg2_ops, 560 }, 561 }; 562 563 static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = { 564 .cmd_rcgr = 0x5000, 565 .mnd_width = 0, 566 .hid_width = 5, 567 .parent_map = gcc_parent_map_0, 568 .freq_tbl = ftbl_blsp1_qup0_i2c_apps_clk_src, 569 .clkr.hw.init = &(struct clk_init_data){ 570 .name = "blsp1_qup4_i2c_apps_clk_src", 571 .parent_data = gcc_parent_data_0, 572 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 573 .ops = &clk_rcg2_ops, 574 }, 575 }; 576 577 static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = { 578 .cmd_rcgr = 0x5024, 579 .mnd_width = 8, 580 .hid_width = 5, 581 .parent_map = gcc_parent_map_0, 582 .freq_tbl = ftbl_blsp1_qup0_spi_apps_clk_src, 583 .clkr.hw.init = &(struct clk_init_data){ 584 .name = "blsp1_qup4_spi_apps_clk_src", 585 .parent_data = gcc_parent_data_0, 586 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 587 .ops = &clk_rcg2_ops, 588 }, 589 }; 590 591 static const struct freq_tbl ftbl_blsp1_uart0_apps_clk_src[] = { 592 F(3686400, P_GPLL0_OUT_MAIN, 1, 72, 15625), 593 F(7372800, P_GPLL0_OUT_MAIN, 1, 144, 15625), 594 F(14745600, P_GPLL0_OUT_MAIN, 1, 288, 15625), 595 F(16000000, P_GPLL0_OUT_MAIN, 10, 1, 5), 596 F(19200000, P_XO, 1, 0, 0), 597 F(24000000, P_GPLL0_OUT_MAIN, 1, 3, 100), 598 F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2), 599 F(32000000, P_GPLL0_OUT_MAIN, 1, 1, 25), 600 F(40000000, P_GPLL0_OUT_MAIN, 1, 1, 20), 601 F(46400000, P_GPLL0_OUT_MAIN, 1, 29, 500), 602 F(48000000, P_GPLL0_OUT_MAIN, 1, 3, 50), 603 F(51200000, P_GPLL0_OUT_MAIN, 1, 8, 125), 604 F(56000000, P_GPLL0_OUT_MAIN, 1, 7, 100), 605 F(58982400, P_GPLL0_OUT_MAIN, 1, 1152, 15625), 606 F(60000000, P_GPLL0_OUT_MAIN, 1, 3, 40), 607 F(64000000, P_GPLL0_OUT_MAIN, 1, 2, 25), 608 { } 609 }; 610 611 static struct clk_rcg2 blsp1_uart0_apps_clk_src = { 612 .cmd_rcgr = 0x600c, 613 .mnd_width = 16, 614 .hid_width = 5, 615 .parent_map = gcc_parent_map_0, 616 .freq_tbl = ftbl_blsp1_uart0_apps_clk_src, 617 .clkr.hw.init = &(struct clk_init_data){ 618 .name = "blsp1_uart0_apps_clk_src", 619 .parent_data = gcc_parent_data_0, 620 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 621 .ops = &clk_rcg2_ops, 622 }, 623 }; 624 625 static struct clk_rcg2 blsp1_uart1_apps_clk_src = { 626 .cmd_rcgr = 0x2044, 627 .mnd_width = 16, 628 .hid_width = 5, 629 .parent_map = gcc_parent_map_0, 630 .freq_tbl = ftbl_blsp1_uart0_apps_clk_src, 631 .clkr.hw.init = &(struct clk_init_data){ 632 .name = "blsp1_uart1_apps_clk_src", 633 .parent_data = gcc_parent_data_0, 634 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 635 .ops = &clk_rcg2_ops, 636 }, 637 }; 638 639 static struct clk_rcg2 blsp1_uart2_apps_clk_src = { 640 .cmd_rcgr = 0x3034, 641 .mnd_width = 16, 642 .hid_width = 5, 643 .parent_map = gcc_parent_map_0, 644 .freq_tbl = ftbl_blsp1_uart0_apps_clk_src, 645 .clkr.hw.init = &(struct clk_init_data){ 646 .name = "blsp1_uart2_apps_clk_src", 647 .parent_data = gcc_parent_data_0, 648 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 649 .ops = &clk_rcg2_ops, 650 }, 651 }; 652 653 static struct clk_rcg2 blsp1_uart3_apps_clk_src = { 654 .cmd_rcgr = 0x4014, 655 .mnd_width = 16, 656 .hid_width = 5, 657 .cfg_off = 0x20, 658 .parent_map = gcc_parent_map_0, 659 .freq_tbl = ftbl_blsp1_uart0_apps_clk_src, 660 .clkr.hw.init = &(struct clk_init_data){ 661 .name = "blsp1_uart3_apps_clk_src", 662 .parent_data = gcc_parent_data_0, 663 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 664 .ops = &clk_rcg2_ops, 665 }, 666 }; 667 668 static struct clk_rcg2 blsp2_qup0_i2c_apps_clk_src = { 669 .cmd_rcgr = 0xc00c, 670 .mnd_width = 0, 671 .hid_width = 5, 672 .parent_map = gcc_parent_map_0, 673 .freq_tbl = ftbl_blsp1_qup0_i2c_apps_clk_src, 674 .clkr.hw.init = &(struct clk_init_data){ 675 .name = "blsp2_qup0_i2c_apps_clk_src", 676 .parent_data = gcc_parent_data_0, 677 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 678 .ops = &clk_rcg2_ops, 679 }, 680 }; 681 682 static struct clk_rcg2 blsp2_qup0_spi_apps_clk_src = { 683 .cmd_rcgr = 0xc024, 684 .mnd_width = 8, 685 .hid_width = 5, 686 .parent_map = gcc_parent_map_0, 687 .freq_tbl = ftbl_blsp1_qup0_spi_apps_clk_src, 688 .clkr.hw.init = &(struct clk_init_data){ 689 .name = "blsp2_qup0_spi_apps_clk_src", 690 .parent_data = gcc_parent_data_0, 691 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 692 .ops = &clk_rcg2_ops, 693 }, 694 }; 695 696 static struct clk_rcg2 blsp2_uart0_apps_clk_src = { 697 .cmd_rcgr = 0xc044, 698 .mnd_width = 16, 699 .hid_width = 5, 700 .parent_map = gcc_parent_map_0, 701 .freq_tbl = ftbl_blsp1_uart0_apps_clk_src, 702 .clkr.hw.init = &(struct clk_init_data){ 703 .name = "blsp2_uart0_apps_clk_src", 704 .parent_data = gcc_parent_data_0, 705 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 706 .ops = &clk_rcg2_ops, 707 }, 708 }; 709 710 static struct clk_rcg2 byte0_clk_src = { 711 .cmd_rcgr = 0x4d044, 712 .mnd_width = 0, 713 .hid_width = 5, 714 .parent_map = gcc_parent_map_5, 715 .clkr.hw.init = &(struct clk_init_data){ 716 .name = "byte0_clk_src", 717 .parent_data = gcc_parent_data_5, 718 .num_parents = ARRAY_SIZE(gcc_parent_data_5), 719 .flags = CLK_SET_RATE_PARENT, 720 .ops = &clk_byte2_ops, 721 }, 722 }; 723 724 static const struct freq_tbl ftbl_emac_clk_src[] = { 725 F(5000000, P_GPLL1_OUT_MAIN, 2, 1, 50), 726 F(50000000, P_GPLL1_OUT_MAIN, 10, 0, 0), 727 F(125000000, P_GPLL1_OUT_MAIN, 4, 0, 0), 728 F(250000000, P_GPLL1_OUT_MAIN, 2, 0, 0), 729 { } 730 }; 731 732 static struct clk_rcg2 emac_clk_src = { 733 .cmd_rcgr = 0x4e01c, 734 .mnd_width = 8, 735 .hid_width = 5, 736 .parent_map = gcc_parent_map_4, 737 .freq_tbl = ftbl_emac_clk_src, 738 .clkr.hw.init = &(struct clk_init_data){ 739 .name = "emac_clk_src", 740 .parent_data = gcc_parent_data_4, 741 .num_parents = ARRAY_SIZE(gcc_parent_data_4), 742 .ops = &clk_rcg2_ops, 743 }, 744 }; 745 746 static const struct freq_tbl ftbl_emac_ptp_clk_src[] = { 747 F(50000000, P_GPLL1_OUT_MAIN, 10, 0, 0), 748 F(125000000, P_GPLL1_OUT_MAIN, 4, 0, 0), 749 F(250000000, P_GPLL1_OUT_MAIN, 2, 0, 0), 750 { } 751 }; 752 753 static struct clk_rcg2 emac_ptp_clk_src = { 754 .cmd_rcgr = 0x4e014, 755 .mnd_width = 0, 756 .hid_width = 5, 757 .parent_map = gcc_parent_map_4, 758 .freq_tbl = ftbl_emac_ptp_clk_src, 759 .clkr.hw.init = &(struct clk_init_data){ 760 .name = "emac_ptp_clk_src", 761 .parent_data = gcc_parent_data_4, 762 .num_parents = ARRAY_SIZE(gcc_parent_data_4), 763 .ops = &clk_rcg2_ops, 764 }, 765 }; 766 767 static const struct freq_tbl ftbl_esc0_clk_src[] = { 768 F(19200000, P_XO, 1, 0, 0), 769 { } 770 }; 771 772 static struct clk_rcg2 esc0_clk_src = { 773 .cmd_rcgr = 0x4d05c, 774 .mnd_width = 0, 775 .hid_width = 5, 776 .parent_map = gcc_parent_map_6, 777 .freq_tbl = ftbl_esc0_clk_src, 778 .clkr.hw.init = &(struct clk_init_data){ 779 .name = "esc0_clk_src", 780 .parent_data = gcc_parent_data_6, 781 .num_parents = ARRAY_SIZE(gcc_parent_data_6), 782 .ops = &clk_rcg2_ops, 783 }, 784 }; 785 786 static const struct freq_tbl ftbl_gfx3d_clk_src[] = { 787 F(19200000, P_XO, 1, 0, 0), 788 F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0), 789 F(80000000, P_GPLL0_OUT_MAIN, 10, 0, 0), 790 F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0), 791 F(160000000, P_GPLL0_OUT_MAIN, 5, 0, 0), 792 F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0), 793 F(228571429, P_GPLL0_OUT_MAIN, 3.5, 0, 0), 794 F(240000000, P_GPLL6_OUT_AUX, 4.5, 0, 0), 795 F(266666667, P_GPLL0_OUT_MAIN, 3, 0, 0), 796 F(270000000, P_GPLL6_OUT_AUX, 4, 0, 0), 797 F(320000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0), 798 F(400000000, P_GPLL0_OUT_MAIN, 2, 0, 0), 799 F(484800000, P_GPLL3_OUT_MAIN, 1, 0, 0), 800 F(523200000, P_GPLL3_OUT_MAIN, 1, 0, 0), 801 F(550000000, P_GPLL3_OUT_MAIN, 1, 0, 0), 802 F(598000000, P_GPLL3_OUT_MAIN, 1, 0, 0), 803 { } 804 }; 805 806 static struct clk_rcg2 gfx3d_clk_src = { 807 .cmd_rcgr = 0x59000, 808 .mnd_width = 0, 809 .hid_width = 5, 810 .parent_map = gcc_parent_map_7, 811 .freq_tbl = ftbl_gfx3d_clk_src, 812 .clkr.hw.init = &(struct clk_init_data){ 813 .name = "gfx3d_clk_src", 814 .parent_data = gcc_parent_data_7, 815 .num_parents = ARRAY_SIZE(gcc_parent_data_7), 816 .ops = &clk_rcg2_ops, 817 }, 818 }; 819 820 static const struct freq_tbl ftbl_gp1_clk_src[] = { 821 F(19200000, P_XO, 1, 0, 0), 822 F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0), 823 F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0), 824 { } 825 }; 826 827 static struct clk_rcg2 gp1_clk_src = { 828 .cmd_rcgr = 0x8004, 829 .mnd_width = 8, 830 .hid_width = 5, 831 .parent_map = gcc_parent_map_2, 832 .freq_tbl = ftbl_gp1_clk_src, 833 .clkr.hw.init = &(struct clk_init_data){ 834 .name = "gp1_clk_src", 835 .parent_data = gcc_parent_data_2, 836 .num_parents = ARRAY_SIZE(gcc_parent_data_2), 837 .ops = &clk_rcg2_ops, 838 }, 839 }; 840 841 static struct clk_rcg2 gp2_clk_src = { 842 .cmd_rcgr = 0x9004, 843 .mnd_width = 8, 844 .hid_width = 5, 845 .parent_map = gcc_parent_map_2, 846 .freq_tbl = ftbl_gp1_clk_src, 847 .clkr.hw.init = &(struct clk_init_data){ 848 .name = "gp2_clk_src", 849 .parent_data = gcc_parent_data_2, 850 .num_parents = ARRAY_SIZE(gcc_parent_data_2), 851 .ops = &clk_rcg2_ops, 852 }, 853 }; 854 855 static struct clk_rcg2 gp3_clk_src = { 856 .cmd_rcgr = 0xa004, 857 .mnd_width = 8, 858 .hid_width = 5, 859 .parent_map = gcc_parent_map_2, 860 .freq_tbl = ftbl_gp1_clk_src, 861 .clkr.hw.init = &(struct clk_init_data){ 862 .name = "gp3_clk_src", 863 .parent_data = gcc_parent_data_2, 864 .num_parents = ARRAY_SIZE(gcc_parent_data_2), 865 .ops = &clk_rcg2_ops, 866 }, 867 }; 868 869 static struct clk_rcg2 hdmi_app_clk_src = { 870 .cmd_rcgr = 0x4d0e4, 871 .mnd_width = 0, 872 .hid_width = 5, 873 .parent_map = gcc_parent_map_1, 874 .freq_tbl = ftbl_esc0_clk_src, 875 .clkr.hw.init = &(struct clk_init_data){ 876 .name = "hdmi_app_clk_src", 877 .parent_data = gcc_parent_data_1, 878 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 879 .ops = &clk_rcg2_ops, 880 }, 881 }; 882 883 static struct clk_rcg2 hdmi_pclk_clk_src = { 884 .cmd_rcgr = 0x4d0dc, 885 .mnd_width = 0, 886 .hid_width = 5, 887 .parent_map = gcc_parent_map_8, 888 .freq_tbl = ftbl_esc0_clk_src, 889 .clkr.hw.init = &(struct clk_init_data){ 890 .name = "hdmi_pclk_clk_src", 891 .parent_data = gcc_parent_data_8, 892 .num_parents = ARRAY_SIZE(gcc_parent_data_8), 893 .ops = &clk_rcg2_ops, 894 }, 895 }; 896 897 static const struct freq_tbl ftbl_mdp_clk_src[] = { 898 F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0), 899 F(80000000, P_GPLL0_OUT_MAIN, 10, 0, 0), 900 F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0), 901 F(145454545, P_GPLL0_OUT_MAIN, 5.5, 0, 0), 902 F(160000000, P_GPLL0_OUT_MAIN, 5, 0, 0), 903 F(177777778, P_GPLL0_OUT_MAIN, 4.5, 0, 0), 904 F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0), 905 F(266666667, P_GPLL0_OUT_MAIN, 3, 0, 0), 906 F(320000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0), 907 { } 908 }; 909 910 static struct clk_rcg2 mdp_clk_src = { 911 .cmd_rcgr = 0x4d014, 912 .mnd_width = 0, 913 .hid_width = 5, 914 .parent_map = gcc_parent_map_9, 915 .freq_tbl = ftbl_mdp_clk_src, 916 .clkr.hw.init = &(struct clk_init_data){ 917 .name = "mdp_clk_src", 918 .parent_data = gcc_parent_data_9, 919 .num_parents = ARRAY_SIZE(gcc_parent_data_9), 920 .ops = &clk_rcg2_ops, 921 }, 922 }; 923 924 static const struct freq_tbl ftbl_pcie_0_aux_clk_src[] = { 925 F(1200000, P_XO, 16, 0, 0), 926 { } 927 }; 928 929 static struct clk_rcg2 pcie_0_aux_clk_src = { 930 .cmd_rcgr = 0x3e024, 931 .mnd_width = 16, 932 .hid_width = 5, 933 .parent_map = gcc_parent_map_10, 934 .freq_tbl = ftbl_pcie_0_aux_clk_src, 935 .clkr.hw.init = &(struct clk_init_data){ 936 .name = "pcie_0_aux_clk_src", 937 .parent_data = gcc_parent_data_10, 938 .num_parents = ARRAY_SIZE(gcc_parent_data_10), 939 .ops = &clk_rcg2_ops, 940 }, 941 }; 942 943 static const struct freq_tbl ftbl_pcie_0_pipe_clk_src[] = { 944 F(19200000, P_XO, 1, 0, 0), 945 F(125000000, P_PCIE_0_PIPE_CLK, 2, 0, 0), 946 F(250000000, P_PCIE_0_PIPE_CLK, 1, 0, 0), 947 { } 948 }; 949 950 static struct clk_rcg2 pcie_0_pipe_clk_src = { 951 .cmd_rcgr = 0x3e01c, 952 .mnd_width = 0, 953 .hid_width = 5, 954 .parent_map = gcc_parent_map_11, 955 .freq_tbl = ftbl_pcie_0_pipe_clk_src, 956 .clkr.hw.init = &(struct clk_init_data){ 957 .name = "pcie_0_pipe_clk_src", 958 .parent_data = gcc_parent_data_11, 959 .num_parents = ARRAY_SIZE(gcc_parent_data_11), 960 .ops = &clk_rcg2_ops, 961 }, 962 }; 963 964 static struct clk_rcg2 pclk0_clk_src = { 965 .cmd_rcgr = 0x4d000, 966 .mnd_width = 8, 967 .hid_width = 5, 968 .parent_map = gcc_parent_map_12, 969 .clkr.hw.init = &(struct clk_init_data){ 970 .name = "pclk0_clk_src", 971 .parent_data = gcc_parent_data_12, 972 .num_parents = ARRAY_SIZE(gcc_parent_data_12), 973 .flags = CLK_SET_RATE_PARENT, 974 .ops = &clk_pixel_ops, 975 }, 976 }; 977 978 static const struct freq_tbl ftbl_pdm2_clk_src[] = { 979 F(19200000, P_XO, 1, 0, 0), 980 F(64000000, P_GPLL0_OUT_MAIN, 12.5, 0, 0), 981 { } 982 }; 983 984 static struct clk_rcg2 pdm2_clk_src = { 985 .cmd_rcgr = 0x44010, 986 .mnd_width = 0, 987 .hid_width = 5, 988 .parent_map = gcc_parent_map_0, 989 .freq_tbl = ftbl_pdm2_clk_src, 990 .clkr.hw.init = &(struct clk_init_data){ 991 .name = "pdm2_clk_src", 992 .parent_data = gcc_parent_data_0, 993 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 994 .ops = &clk_rcg2_ops, 995 }, 996 }; 997 998 static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = { 999 F(144000, P_XO, 16, 3, 25), 1000 F(400000, P_XO, 12, 1, 4), 1001 F(20000000, P_GPLL0_OUT_MAIN, 10, 1, 4), 1002 F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2), 1003 F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0), 1004 F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0), 1005 F(177777778, P_GPLL0_OUT_MAIN, 4.5, 0, 0), 1006 F(192000000, P_GPLL4_OUT_MAIN, 6, 0, 0), 1007 F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0), 1008 F(384000000, P_GPLL4_OUT_MAIN, 3, 0, 0), 1009 { } 1010 }; 1011 1012 static struct clk_rcg2 sdcc1_apps_clk_src = { 1013 .cmd_rcgr = 0x42004, 1014 .mnd_width = 8, 1015 .hid_width = 5, 1016 .parent_map = gcc_parent_map_13, 1017 .freq_tbl = ftbl_sdcc1_apps_clk_src, 1018 .clkr.hw.init = &(struct clk_init_data){ 1019 .name = "sdcc1_apps_clk_src", 1020 .parent_data = gcc_parent_data_13, 1021 .num_parents = ARRAY_SIZE(gcc_parent_data_13), 1022 .ops = &clk_rcg2_floor_ops, 1023 }, 1024 }; 1025 1026 static const struct freq_tbl ftbl_sdcc1_ice_core_clk_src[] = { 1027 F(160000000, P_GPLL0_OUT_MAIN, 5, 0, 0), 1028 F(266666667, P_GPLL0_OUT_MAIN, 3, 0, 0), 1029 { } 1030 }; 1031 1032 static struct clk_rcg2 sdcc1_ice_core_clk_src = { 1033 .cmd_rcgr = 0x5d000, 1034 .mnd_width = 8, 1035 .hid_width = 5, 1036 .parent_map = gcc_parent_map_3, 1037 .freq_tbl = ftbl_sdcc1_ice_core_clk_src, 1038 .clkr.hw.init = &(struct clk_init_data){ 1039 .name = "sdcc1_ice_core_clk_src", 1040 .parent_data = gcc_parent_data_3, 1041 .num_parents = ARRAY_SIZE(gcc_parent_data_3), 1042 .ops = &clk_rcg2_ops, 1043 }, 1044 }; 1045 1046 static const struct freq_tbl ftbl_sdcc2_apps_clk_src[] = { 1047 F(144000, P_XO, 16, 3, 25), 1048 F(400000, P_XO, 12, 1, 4), 1049 F(20000000, P_GPLL0_OUT_MAIN, 10, 1, 4), 1050 F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2), 1051 F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0), 1052 F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0), 1053 F(177777778, P_GPLL0_OUT_MAIN, 4.5, 0, 0), 1054 F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0), 1055 { } 1056 }; 1057 1058 static struct clk_rcg2 sdcc2_apps_clk_src = { 1059 .cmd_rcgr = 0x43004, 1060 .mnd_width = 8, 1061 .hid_width = 5, 1062 .parent_map = gcc_parent_map_14, 1063 .freq_tbl = ftbl_sdcc2_apps_clk_src, 1064 .clkr.hw.init = &(struct clk_init_data){ 1065 .name = "sdcc2_apps_clk_src", 1066 .parent_data = gcc_parent_data_14, 1067 .num_parents = ARRAY_SIZE(gcc_parent_data_14), 1068 .ops = &clk_rcg2_floor_ops, 1069 }, 1070 }; 1071 1072 static struct clk_rcg2 usb20_mock_utmi_clk_src = { 1073 .cmd_rcgr = 0x41048, 1074 .mnd_width = 0, 1075 .hid_width = 5, 1076 .parent_map = gcc_parent_map_1, 1077 .freq_tbl = ftbl_esc0_clk_src, 1078 .clkr.hw.init = &(struct clk_init_data){ 1079 .name = "usb20_mock_utmi_clk_src", 1080 .parent_data = gcc_parent_data_1, 1081 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 1082 .ops = &clk_rcg2_ops, 1083 }, 1084 }; 1085 1086 static const struct freq_tbl ftbl_usb30_master_clk_src[] = { 1087 F(19200000, P_XO, 1, 0, 0), 1088 F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0), 1089 F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0), 1090 F(266666667, P_GPLL0_OUT_MAIN, 3, 0, 0), 1091 { } 1092 }; 1093 1094 static struct clk_rcg2 usb30_master_clk_src = { 1095 .cmd_rcgr = 0x39028, 1096 .mnd_width = 8, 1097 .hid_width = 5, 1098 .parent_map = gcc_parent_map_0, 1099 .freq_tbl = ftbl_usb30_master_clk_src, 1100 .clkr.hw.init = &(struct clk_init_data){ 1101 .name = "usb30_master_clk_src", 1102 .parent_data = gcc_parent_data_0, 1103 .num_parents = ARRAY_SIZE(gcc_parent_data_0), 1104 .ops = &clk_rcg2_ops, 1105 }, 1106 }; 1107 1108 static struct clk_rcg2 usb30_mock_utmi_clk_src = { 1109 .cmd_rcgr = 0x3901c, 1110 .mnd_width = 0, 1111 .hid_width = 5, 1112 .parent_map = gcc_parent_map_1, 1113 .freq_tbl = ftbl_esc0_clk_src, 1114 .clkr.hw.init = &(struct clk_init_data){ 1115 .name = "usb30_mock_utmi_clk_src", 1116 .parent_data = gcc_parent_data_1, 1117 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 1118 .ops = &clk_rcg2_ops, 1119 }, 1120 }; 1121 1122 static struct clk_rcg2 usb3_phy_aux_clk_src = { 1123 .cmd_rcgr = 0x3903c, 1124 .mnd_width = 0, 1125 .hid_width = 5, 1126 .parent_map = gcc_parent_map_1, 1127 .freq_tbl = ftbl_pcie_0_aux_clk_src, 1128 .clkr.hw.init = &(struct clk_init_data){ 1129 .name = "usb3_phy_aux_clk_src", 1130 .parent_data = gcc_parent_data_1, 1131 .num_parents = ARRAY_SIZE(gcc_parent_data_1), 1132 .ops = &clk_rcg2_ops, 1133 }, 1134 }; 1135 1136 static const struct freq_tbl ftbl_usb_hs_system_clk_src[] = { 1137 F(19200000, P_XO, 1, 0, 0), 1138 F(80000000, P_GPLL0_OUT_MAIN, 10, 0, 0), 1139 F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0), 1140 F(133333333, P_GPLL0_OUT_MAIN, 6, 0, 0), 1141 F(177777778, P_GPLL0_OUT_MAIN, 4.5, 0, 0), 1142 { } 1143 }; 1144 1145 static struct clk_rcg2 usb_hs_system_clk_src = { 1146 .cmd_rcgr = 0x41010, 1147 .mnd_width = 0, 1148 .hid_width = 5, 1149 .parent_map = gcc_parent_map_3, 1150 .freq_tbl = ftbl_usb_hs_system_clk_src, 1151 .clkr.hw.init = &(struct clk_init_data){ 1152 .name = "usb_hs_system_clk_src", 1153 .parent_data = gcc_parent_data_3, 1154 .num_parents = ARRAY_SIZE(gcc_parent_data_3), 1155 .ops = &clk_rcg2_ops, 1156 }, 1157 }; 1158 1159 static struct clk_rcg2 vsync_clk_src = { 1160 .cmd_rcgr = 0x4d02c, 1161 .mnd_width = 0, 1162 .hid_width = 5, 1163 .parent_map = gcc_parent_map_15, 1164 .freq_tbl = ftbl_esc0_clk_src, 1165 .clkr.hw.init = &(struct clk_init_data){ 1166 .name = "vsync_clk_src", 1167 .parent_data = gcc_parent_data_15, 1168 .num_parents = ARRAY_SIZE(gcc_parent_data_15), 1169 .ops = &clk_rcg2_ops, 1170 }, 1171 }; 1172 1173 static const struct freq_tbl ftbl_cdsp_bimc_clk_src[] = { 1174 F(19200000, P_XO, 1, 0, 0), 1175 F(133333333, P_GPLL0_OUT_MAIN, 6, 0, 0), 1176 F(266666667, P_GPLL0_OUT_MAIN, 3, 0, 0), 1177 F(320000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0), 1178 { } 1179 }; 1180 1181 static struct clk_rcg2 cdsp_bimc_clk_src = { 1182 .cmd_rcgr = 0x5e010, 1183 .mnd_width = 0, 1184 .hid_width = 5, 1185 .parent_map = gcc_parent_map_16, 1186 .freq_tbl = ftbl_cdsp_bimc_clk_src, 1187 .clkr.hw.init = &(struct clk_init_data) { 1188 .name = "cdsp_bimc_clk_src", 1189 .parent_data = gcc_parent_data_16, 1190 .num_parents = ARRAY_SIZE(gcc_parent_data_16), 1191 .ops = &clk_rcg2_ops, 1192 }, 1193 }; 1194 1195 static struct clk_branch gcc_apss_ahb_clk = { 1196 .halt_reg = 0x4601c, 1197 .halt_check = BRANCH_HALT_VOTED, 1198 .clkr = { 1199 .enable_reg = 0x45004, 1200 .enable_mask = BIT(14), 1201 .hw.init = &(struct clk_init_data){ 1202 .name = "gcc_apss_ahb_clk", 1203 .parent_hws = (const struct clk_hw*[]) { 1204 &apss_ahb_clk_src.clkr.hw, 1205 }, 1206 .num_parents = 1, 1207 .flags = CLK_SET_RATE_PARENT, 1208 .ops = &clk_branch2_ops, 1209 }, 1210 }, 1211 }; 1212 1213 static struct clk_branch gcc_apss_tcu_clk = { 1214 .halt_reg = 0x5b004, 1215 .halt_check = BRANCH_VOTED, 1216 .clkr = { 1217 .enable_reg = 0x4500c, 1218 .enable_mask = BIT(1), 1219 .hw.init = &(struct clk_init_data){ 1220 .name = "gcc_apss_tcu_clk", 1221 .ops = &clk_branch2_ops, 1222 }, 1223 }, 1224 }; 1225 1226 static struct clk_branch gcc_bimc_gfx_clk = { 1227 .halt_reg = 0x59034, 1228 .halt_check = BRANCH_HALT, 1229 .clkr = { 1230 .enable_reg = 0x59034, 1231 .enable_mask = BIT(0), 1232 .hw.init = &(struct clk_init_data){ 1233 .name = "gcc_bimc_gfx_clk", 1234 .ops = &clk_branch2_ops, 1235 .parent_hws = (const struct clk_hw*[]) { 1236 &gcc_apss_tcu_clk.clkr.hw, 1237 }, 1238 1239 }, 1240 }, 1241 }; 1242 1243 static struct clk_branch gcc_bimc_gpu_clk = { 1244 .halt_reg = 0x59030, 1245 .halt_check = BRANCH_HALT, 1246 .clkr = { 1247 .enable_reg = 0x59030, 1248 .enable_mask = BIT(0), 1249 .hw.init = &(struct clk_init_data){ 1250 .name = "gcc_bimc_gpu_clk", 1251 .ops = &clk_branch2_ops, 1252 }, 1253 }, 1254 }; 1255 1256 static struct clk_branch gcc_bimc_cdsp_clk = { 1257 .halt_reg = 0x31030, 1258 .halt_check = BRANCH_HALT, 1259 .clkr = { 1260 .enable_reg = 0x31030, 1261 .enable_mask = BIT(0), 1262 .hw.init = &(struct clk_init_data) { 1263 .name = "gcc_bimc_cdsp_clk", 1264 .parent_hws = (const struct clk_hw*[]) { 1265 &cdsp_bimc_clk_src.clkr.hw 1266 }, 1267 .num_parents = 1, 1268 .flags = CLK_SET_RATE_PARENT, 1269 .ops = &clk_branch2_ops, 1270 }, 1271 }, 1272 }; 1273 1274 static struct clk_branch gcc_bimc_mdss_clk = { 1275 .halt_reg = 0x31038, 1276 .halt_check = BRANCH_HALT, 1277 .clkr = { 1278 .enable_reg = 0x31038, 1279 .enable_mask = BIT(0), 1280 .hw.init = &(struct clk_init_data){ 1281 .name = "gcc_bimc_mdss_clk", 1282 .ops = &clk_branch2_ops, 1283 }, 1284 }, 1285 }; 1286 1287 static struct clk_branch gcc_blsp1_ahb_clk = { 1288 .halt_reg = 0x1008, 1289 .halt_check = BRANCH_HALT_VOTED, 1290 .clkr = { 1291 .enable_reg = 0x45004, 1292 .enable_mask = BIT(10), 1293 .hw.init = &(struct clk_init_data){ 1294 .name = "gcc_blsp1_ahb_clk", 1295 .ops = &clk_branch2_ops, 1296 }, 1297 }, 1298 }; 1299 1300 static struct clk_branch gcc_dcc_clk = { 1301 .halt_reg = 0x77004, 1302 .halt_check = BRANCH_HALT, 1303 .clkr = { 1304 .enable_reg = 0x77004, 1305 .enable_mask = BIT(0), 1306 .hw.init = &(struct clk_init_data){ 1307 .name = "gcc_dcc_clk", 1308 .ops = &clk_branch2_ops, 1309 }, 1310 }, 1311 }; 1312 1313 static struct clk_branch gcc_dcc_xo_clk = { 1314 .halt_reg = 0x77008, 1315 .halt_check = BRANCH_HALT, 1316 .clkr = { 1317 .enable_reg = 0x77008, 1318 .enable_mask = BIT(0), 1319 .hw.init = &(struct clk_init_data){ 1320 .name = "gcc_dcc_xo_clk", 1321 .ops = &clk_branch2_ops, 1322 }, 1323 }, 1324 }; 1325 1326 static struct clk_branch gcc_blsp1_qup0_i2c_apps_clk = { 1327 .halt_reg = 0x6028, 1328 .halt_check = BRANCH_HALT, 1329 .clkr = { 1330 .enable_reg = 0x6028, 1331 .enable_mask = BIT(0), 1332 .hw.init = &(struct clk_init_data){ 1333 .name = "gcc_blsp1_qup0_i2c_apps_clk", 1334 .parent_hws = (const struct clk_hw*[]) { 1335 &blsp1_qup0_i2c_apps_clk_src.clkr.hw, 1336 }, 1337 .num_parents = 1, 1338 .flags = CLK_SET_RATE_PARENT, 1339 .ops = &clk_branch2_ops, 1340 }, 1341 }, 1342 }; 1343 1344 static struct clk_branch gcc_blsp1_qup0_spi_apps_clk = { 1345 .halt_reg = 0x6024, 1346 .halt_check = BRANCH_HALT, 1347 .clkr = { 1348 .enable_reg = 0x6024, 1349 .enable_mask = BIT(0), 1350 .hw.init = &(struct clk_init_data){ 1351 .name = "gcc_blsp1_qup0_spi_apps_clk", 1352 .parent_hws = (const struct clk_hw*[]) { 1353 &blsp1_qup0_spi_apps_clk_src.clkr.hw, 1354 }, 1355 .num_parents = 1, 1356 .flags = CLK_SET_RATE_PARENT, 1357 .ops = &clk_branch2_ops, 1358 }, 1359 }, 1360 }; 1361 1362 static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = { 1363 .halt_reg = 0x2008, 1364 .halt_check = BRANCH_HALT, 1365 .clkr = { 1366 .enable_reg = 0x2008, 1367 .enable_mask = BIT(0), 1368 .hw.init = &(struct clk_init_data){ 1369 .name = "gcc_blsp1_qup1_i2c_apps_clk", 1370 .parent_hws = (const struct clk_hw*[]) { 1371 &blsp1_qup1_i2c_apps_clk_src.clkr.hw, 1372 }, 1373 .num_parents = 1, 1374 .flags = CLK_SET_RATE_PARENT, 1375 .ops = &clk_branch2_ops, 1376 }, 1377 }, 1378 }; 1379 1380 static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = { 1381 .halt_reg = 0x2004, 1382 .halt_check = BRANCH_HALT, 1383 .clkr = { 1384 .enable_reg = 0x2004, 1385 .enable_mask = BIT(0), 1386 .hw.init = &(struct clk_init_data){ 1387 .name = "gcc_blsp1_qup1_spi_apps_clk", 1388 .parent_hws = (const struct clk_hw*[]) { 1389 &blsp1_qup1_spi_apps_clk_src.clkr.hw, 1390 }, 1391 .num_parents = 1, 1392 .flags = CLK_SET_RATE_PARENT, 1393 .ops = &clk_branch2_ops, 1394 }, 1395 }, 1396 }; 1397 1398 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = { 1399 .halt_reg = 0x3010, 1400 .halt_check = BRANCH_HALT, 1401 .clkr = { 1402 .enable_reg = 0x3010, 1403 .enable_mask = BIT(0), 1404 .hw.init = &(struct clk_init_data){ 1405 .name = "gcc_blsp1_qup2_i2c_apps_clk", 1406 .parent_hws = (const struct clk_hw*[]) { 1407 &blsp1_qup2_i2c_apps_clk_src.clkr.hw, 1408 }, 1409 .num_parents = 1, 1410 .flags = CLK_SET_RATE_PARENT, 1411 .ops = &clk_branch2_ops, 1412 }, 1413 }, 1414 }; 1415 1416 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = { 1417 .halt_reg = 0x300c, 1418 .halt_check = BRANCH_HALT, 1419 .clkr = { 1420 .enable_reg = 0x300c, 1421 .enable_mask = BIT(0), 1422 .hw.init = &(struct clk_init_data){ 1423 .name = "gcc_blsp1_qup2_spi_apps_clk", 1424 .parent_hws = (const struct clk_hw*[]) { 1425 &blsp1_qup2_spi_apps_clk_src.clkr.hw, 1426 }, 1427 .num_parents = 1, 1428 .flags = CLK_SET_RATE_PARENT, 1429 .ops = &clk_branch2_ops, 1430 }, 1431 }, 1432 }; 1433 1434 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = { 1435 .halt_reg = 0x4020, 1436 .halt_check = BRANCH_HALT, 1437 .clkr = { 1438 .enable_reg = 0x4020, 1439 .enable_mask = BIT(0), 1440 .hw.init = &(struct clk_init_data){ 1441 .name = "gcc_blsp1_qup3_i2c_apps_clk", 1442 .parent_hws = (const struct clk_hw*[]) { 1443 &blsp1_qup3_i2c_apps_clk_src.clkr.hw, 1444 }, 1445 .num_parents = 1, 1446 .flags = CLK_SET_RATE_PARENT, 1447 .ops = &clk_branch2_ops, 1448 }, 1449 }, 1450 }; 1451 1452 static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = { 1453 .halt_reg = 0x401c, 1454 .halt_check = BRANCH_HALT, 1455 .clkr = { 1456 .enable_reg = 0x401c, 1457 .enable_mask = BIT(0), 1458 .hw.init = &(struct clk_init_data){ 1459 .name = "gcc_blsp1_qup3_spi_apps_clk", 1460 .parent_hws = (const struct clk_hw*[]) { 1461 &blsp1_qup3_spi_apps_clk_src.clkr.hw, 1462 }, 1463 .num_parents = 1, 1464 .flags = CLK_SET_RATE_PARENT, 1465 .ops = &clk_branch2_ops, 1466 }, 1467 }, 1468 }; 1469 1470 static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = { 1471 .halt_reg = 0x5020, 1472 .halt_check = BRANCH_HALT, 1473 .clkr = { 1474 .enable_reg = 0x5020, 1475 .enable_mask = BIT(0), 1476 .hw.init = &(struct clk_init_data){ 1477 .name = "gcc_blsp1_qup4_i2c_apps_clk", 1478 .parent_hws = (const struct clk_hw*[]) { 1479 &blsp1_qup4_i2c_apps_clk_src.clkr.hw, 1480 }, 1481 .num_parents = 1, 1482 .flags = CLK_SET_RATE_PARENT, 1483 .ops = &clk_branch2_ops, 1484 }, 1485 }, 1486 }; 1487 1488 static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = { 1489 .halt_reg = 0x501c, 1490 .halt_check = BRANCH_HALT, 1491 .clkr = { 1492 .enable_reg = 0x501c, 1493 .enable_mask = BIT(0), 1494 .hw.init = &(struct clk_init_data){ 1495 .name = "gcc_blsp1_qup4_spi_apps_clk", 1496 .parent_hws = (const struct clk_hw*[]) { 1497 &blsp1_qup4_spi_apps_clk_src.clkr.hw, 1498 }, 1499 .num_parents = 1, 1500 .flags = CLK_SET_RATE_PARENT, 1501 .ops = &clk_branch2_ops, 1502 }, 1503 }, 1504 }; 1505 1506 static struct clk_branch gcc_blsp1_uart0_apps_clk = { 1507 .halt_reg = 0x6004, 1508 .halt_check = BRANCH_HALT, 1509 .clkr = { 1510 .enable_reg = 0x6004, 1511 .enable_mask = BIT(0), 1512 .hw.init = &(struct clk_init_data){ 1513 .name = "gcc_blsp1_uart0_apps_clk", 1514 .parent_hws = (const struct clk_hw*[]) { 1515 &blsp1_uart0_apps_clk_src.clkr.hw, 1516 }, 1517 .num_parents = 1, 1518 .flags = CLK_SET_RATE_PARENT, 1519 .ops = &clk_branch2_ops, 1520 }, 1521 }, 1522 }; 1523 1524 static struct clk_branch gcc_blsp1_uart1_apps_clk = { 1525 .halt_reg = 0x203c, 1526 .halt_check = BRANCH_HALT, 1527 .clkr = { 1528 .enable_reg = 0x203c, 1529 .enable_mask = BIT(0), 1530 .hw.init = &(struct clk_init_data){ 1531 .name = "gcc_blsp1_uart1_apps_clk", 1532 .parent_hws = (const struct clk_hw*[]) { 1533 &blsp1_uart1_apps_clk_src.clkr.hw, 1534 }, 1535 .num_parents = 1, 1536 .flags = CLK_SET_RATE_PARENT, 1537 .ops = &clk_branch2_ops, 1538 }, 1539 }, 1540 }; 1541 1542 static struct clk_branch gcc_blsp1_uart2_apps_clk = { 1543 .halt_reg = 0x302c, 1544 .halt_check = BRANCH_HALT, 1545 .clkr = { 1546 .enable_reg = 0x302c, 1547 .enable_mask = BIT(0), 1548 .hw.init = &(struct clk_init_data){ 1549 .name = "gcc_blsp1_uart2_apps_clk", 1550 .parent_hws = (const struct clk_hw*[]) { 1551 &blsp1_uart2_apps_clk_src.clkr.hw, 1552 }, 1553 .num_parents = 1, 1554 .flags = CLK_SET_RATE_PARENT, 1555 .ops = &clk_branch2_ops, 1556 }, 1557 }, 1558 }; 1559 1560 static struct clk_branch gcc_blsp1_uart3_apps_clk = { 1561 .halt_reg = 0x400c, 1562 .halt_check = BRANCH_HALT, 1563 .clkr = { 1564 .enable_reg = 0x400c, 1565 .enable_mask = BIT(0), 1566 .hw.init = &(struct clk_init_data){ 1567 .name = "gcc_blsp1_uart3_apps_clk", 1568 .parent_hws = (const struct clk_hw*[]) { 1569 &blsp1_uart3_apps_clk_src.clkr.hw, 1570 }, 1571 .num_parents = 1, 1572 .flags = CLK_SET_RATE_PARENT, 1573 .ops = &clk_branch2_ops, 1574 }, 1575 }, 1576 }; 1577 1578 static struct clk_branch gcc_blsp2_ahb_clk = { 1579 .halt_reg = 0xb008, 1580 .halt_check = BRANCH_HALT_VOTED, 1581 .clkr = { 1582 .enable_reg = 0x45004, 1583 .enable_mask = BIT(20), 1584 .hw.init = &(struct clk_init_data){ 1585 .name = "gcc_blsp2_ahb_clk", 1586 .ops = &clk_branch2_ops, 1587 }, 1588 }, 1589 }; 1590 1591 static struct clk_branch gcc_blsp2_qup0_i2c_apps_clk = { 1592 .halt_reg = 0xc008, 1593 .halt_check = BRANCH_HALT, 1594 .clkr = { 1595 .enable_reg = 0xc008, 1596 .enable_mask = BIT(0), 1597 .hw.init = &(struct clk_init_data){ 1598 .name = "gcc_blsp2_qup0_i2c_apps_clk", 1599 .parent_hws = (const struct clk_hw*[]) { 1600 &blsp2_qup0_i2c_apps_clk_src.clkr.hw, 1601 }, 1602 .num_parents = 1, 1603 .flags = CLK_SET_RATE_PARENT, 1604 .ops = &clk_branch2_ops, 1605 }, 1606 }, 1607 }; 1608 1609 static struct clk_branch gcc_blsp2_qup0_spi_apps_clk = { 1610 .halt_reg = 0xc004, 1611 .halt_check = BRANCH_HALT, 1612 .clkr = { 1613 .enable_reg = 0xc004, 1614 .enable_mask = BIT(0), 1615 .hw.init = &(struct clk_init_data){ 1616 .name = "gcc_blsp2_qup0_spi_apps_clk", 1617 .parent_hws = (const struct clk_hw*[]) { 1618 &blsp2_qup0_spi_apps_clk_src.clkr.hw, 1619 }, 1620 .num_parents = 1, 1621 .flags = CLK_SET_RATE_PARENT, 1622 .ops = &clk_branch2_ops, 1623 }, 1624 }, 1625 }; 1626 1627 static struct clk_branch gcc_blsp2_uart0_apps_clk = { 1628 .halt_reg = 0xc03c, 1629 .halt_check = BRANCH_HALT, 1630 .clkr = { 1631 .enable_reg = 0xc03c, 1632 .enable_mask = BIT(0), 1633 .hw.init = &(struct clk_init_data){ 1634 .name = "gcc_blsp2_uart0_apps_clk", 1635 .parent_hws = (const struct clk_hw*[]) { 1636 &blsp2_uart0_apps_clk_src.clkr.hw, 1637 }, 1638 .num_parents = 1, 1639 .flags = CLK_SET_RATE_PARENT, 1640 .ops = &clk_branch2_ops, 1641 }, 1642 }, 1643 }; 1644 1645 static struct clk_branch gcc_boot_rom_ahb_clk = { 1646 .halt_reg = 0x1300c, 1647 .halt_check = BRANCH_HALT_VOTED, 1648 .clkr = { 1649 .enable_reg = 0x45004, 1650 .enable_mask = BIT(7), 1651 .hw.init = &(struct clk_init_data){ 1652 .name = "gcc_boot_rom_ahb_clk", 1653 .ops = &clk_branch2_ops, 1654 }, 1655 }, 1656 }; 1657 1658 static struct clk_branch gcc_crypto_ahb_clk = { 1659 .halt_reg = 0x16024, 1660 .halt_check = BRANCH_VOTED, 1661 .clkr = { 1662 .enable_reg = 0x45004, 1663 .enable_mask = BIT(0), 1664 .hw.init = &(struct clk_init_data){ 1665 .name = "gcc_crypto_ahb_clk", 1666 .ops = &clk_branch2_ops, 1667 }, 1668 }, 1669 }; 1670 1671 static struct clk_branch gcc_crypto_axi_clk = { 1672 .halt_reg = 0x16020, 1673 .halt_check = BRANCH_VOTED, 1674 .clkr = { 1675 .enable_reg = 0x45004, 1676 .enable_mask = BIT(1), 1677 .hw.init = &(struct clk_init_data){ 1678 .name = "gcc_crypto_axi_clk", 1679 .ops = &clk_branch2_ops, 1680 }, 1681 }, 1682 }; 1683 1684 static struct clk_branch gcc_crypto_clk = { 1685 .halt_reg = 0x1601c, 1686 .halt_check = BRANCH_VOTED, 1687 .clkr = { 1688 .enable_reg = 0x45004, 1689 .enable_mask = BIT(2), 1690 .hw.init = &(struct clk_init_data){ 1691 .name = "gcc_crypto_clk", 1692 .ops = &clk_branch2_ops, 1693 }, 1694 }, 1695 }; 1696 1697 static struct clk_branch gcc_eth_axi_clk = { 1698 .halt_reg = 0x4e010, 1699 .halt_check = BRANCH_HALT, 1700 .clkr = { 1701 .enable_reg = 0x4e010, 1702 .enable_mask = BIT(0), 1703 .hw.init = &(struct clk_init_data){ 1704 .name = "gcc_eth_axi_clk", 1705 .ops = &clk_branch2_ops, 1706 }, 1707 }, 1708 }; 1709 1710 static struct clk_branch gcc_eth_ptp_clk = { 1711 .halt_reg = 0x4e004, 1712 .halt_check = BRANCH_HALT, 1713 .clkr = { 1714 .enable_reg = 0x4e004, 1715 .enable_mask = BIT(0), 1716 .hw.init = &(struct clk_init_data){ 1717 .name = "gcc_eth_ptp_clk", 1718 .parent_hws = (const struct clk_hw*[]) { 1719 &emac_ptp_clk_src.clkr.hw, 1720 }, 1721 .num_parents = 1, 1722 .flags = CLK_SET_RATE_PARENT, 1723 .ops = &clk_branch2_ops, 1724 }, 1725 }, 1726 }; 1727 1728 static struct clk_branch gcc_eth_rgmii_clk = { 1729 .halt_reg = 0x4e008, 1730 .halt_check = BRANCH_HALT, 1731 .clkr = { 1732 .enable_reg = 0x4e008, 1733 .enable_mask = BIT(0), 1734 .hw.init = &(struct clk_init_data){ 1735 .name = "gcc_eth_rgmii_clk", 1736 .parent_hws = (const struct clk_hw*[]) { 1737 &emac_clk_src.clkr.hw, 1738 }, 1739 .num_parents = 1, 1740 .flags = CLK_SET_RATE_PARENT, 1741 .ops = &clk_branch2_ops, 1742 }, 1743 }, 1744 }; 1745 1746 static struct clk_branch gcc_eth_slave_ahb_clk = { 1747 .halt_reg = 0x4e00c, 1748 .halt_check = BRANCH_HALT, 1749 .clkr = { 1750 .enable_reg = 0x4e00c, 1751 .enable_mask = BIT(0), 1752 .hw.init = &(struct clk_init_data){ 1753 .name = "gcc_eth_slave_ahb_clk", 1754 .ops = &clk_branch2_ops, 1755 }, 1756 }, 1757 }; 1758 1759 static struct clk_branch gcc_geni_ir_s_clk = { 1760 .halt_reg = 0xf008, 1761 .halt_check = BRANCH_HALT, 1762 .clkr = { 1763 .enable_reg = 0xf008, 1764 .enable_mask = BIT(0), 1765 .hw.init = &(struct clk_init_data){ 1766 .name = "gcc_geni_ir_s_clk", 1767 .ops = &clk_branch2_ops, 1768 }, 1769 }, 1770 }; 1771 1772 static struct clk_branch gcc_geni_ir_h_clk = { 1773 .halt_reg = 0xf004, 1774 .halt_check = BRANCH_HALT, 1775 .clkr = { 1776 .enable_reg = 0xf004, 1777 .enable_mask = BIT(0), 1778 .hw.init = &(struct clk_init_data){ 1779 .name = "gcc_geni_ir_h_clk", 1780 .ops = &clk_branch2_ops, 1781 }, 1782 }, 1783 }; 1784 1785 static struct clk_branch gcc_gfx_tcu_clk = { 1786 .halt_reg = 0x12020, 1787 .halt_check = BRANCH_VOTED, 1788 .clkr = { 1789 .enable_reg = 0x4500C, 1790 .enable_mask = BIT(2), 1791 .hw.init = &(struct clk_init_data){ 1792 .name = "gcc_gfx_tcu_clk", 1793 .ops = &clk_branch2_ops, 1794 }, 1795 }, 1796 }; 1797 1798 static struct clk_branch gcc_gfx_tbu_clk = { 1799 .halt_reg = 0x12010, 1800 .halt_check = BRANCH_VOTED, 1801 .clkr = { 1802 .enable_reg = 0x4500C, 1803 .enable_mask = BIT(3), 1804 .hw.init = &(struct clk_init_data){ 1805 .name = "gcc_gfx_tbu_clk", 1806 .ops = &clk_branch2_ops, 1807 }, 1808 }, 1809 }; 1810 1811 static struct clk_branch gcc_cdsp_tbu_clk = { 1812 .halt_reg = 0x1203c, 1813 .halt_check = BRANCH_VOTED, 1814 .clkr = { 1815 .enable_reg = 0x13020, 1816 .enable_mask = BIT(9), 1817 .hw.init = &(struct clk_init_data) { 1818 .name = "gcc_cdsp_tbu_clk", 1819 .parent_hws = (const struct clk_hw*[]) { 1820 &cdsp_bimc_clk_src.clkr.hw 1821 }, 1822 .num_parents = 1, 1823 .flags = CLK_SET_RATE_PARENT, 1824 .ops = &clk_branch2_ops, 1825 }, 1826 }, 1827 }; 1828 1829 static struct clk_branch gcc_gp1_clk = { 1830 .halt_reg = 0x8000, 1831 .halt_check = BRANCH_HALT, 1832 .clkr = { 1833 .enable_reg = 0x8000, 1834 .enable_mask = BIT(0), 1835 .hw.init = &(struct clk_init_data){ 1836 .name = "gcc_gp1_clk", 1837 .parent_hws = (const struct clk_hw*[]) { 1838 &gp1_clk_src.clkr.hw, 1839 }, 1840 .num_parents = 1, 1841 .flags = CLK_SET_RATE_PARENT, 1842 .ops = &clk_branch2_ops, 1843 }, 1844 }, 1845 }; 1846 1847 static struct clk_branch gcc_gp2_clk = { 1848 .halt_reg = 0x9000, 1849 .halt_check = BRANCH_HALT, 1850 .clkr = { 1851 .enable_reg = 0x9000, 1852 .enable_mask = BIT(0), 1853 .hw.init = &(struct clk_init_data){ 1854 .name = "gcc_gp2_clk", 1855 .parent_hws = (const struct clk_hw*[]) { 1856 &gp2_clk_src.clkr.hw, 1857 }, 1858 .num_parents = 1, 1859 .flags = CLK_SET_RATE_PARENT, 1860 .ops = &clk_branch2_ops, 1861 }, 1862 }, 1863 }; 1864 1865 static struct clk_branch gcc_gp3_clk = { 1866 .halt_reg = 0xa000, 1867 .halt_check = BRANCH_HALT, 1868 .clkr = { 1869 .enable_reg = 0xa000, 1870 .enable_mask = BIT(0), 1871 .hw.init = &(struct clk_init_data){ 1872 .name = "gcc_gp3_clk", 1873 .parent_hws = (const struct clk_hw*[]) { 1874 &gp3_clk_src.clkr.hw, 1875 }, 1876 .num_parents = 1, 1877 .flags = CLK_SET_RATE_PARENT, 1878 .ops = &clk_branch2_ops, 1879 }, 1880 }, 1881 }; 1882 1883 static struct clk_branch gcc_gtcu_ahb_clk = { 1884 .halt_reg = 0x12044, 1885 .halt_check = BRANCH_VOTED, 1886 .clkr = { 1887 .enable_reg = 0x4500c, 1888 .enable_mask = BIT(13), 1889 .hw.init = &(struct clk_init_data){ 1890 .name = "gcc_gtcu_ahb_clk", 1891 .ops = &clk_branch2_ops, 1892 }, 1893 }, 1894 }; 1895 1896 static struct clk_branch gcc_mdp_tbu_clk = { 1897 .halt_reg = 0x1201c, 1898 .halt_check = BRANCH_VOTED, 1899 .clkr = { 1900 .enable_reg = 0x4500c, 1901 .enable_mask = BIT(4), 1902 .hw.init = &(struct clk_init_data){ 1903 .name = "gcc_mdp_tbu_clk", 1904 .ops = &clk_branch2_ops, 1905 }, 1906 }, 1907 }; 1908 1909 static struct clk_branch gcc_mdss_ahb_clk = { 1910 .halt_reg = 0x4d07c, 1911 .halt_check = BRANCH_HALT, 1912 .clkr = { 1913 .enable_reg = 0x4d07c, 1914 .enable_mask = BIT(0), 1915 .hw.init = &(struct clk_init_data){ 1916 .name = "gcc_mdss_ahb_clk", 1917 .ops = &clk_branch2_ops, 1918 }, 1919 }, 1920 }; 1921 1922 static struct clk_branch gcc_mdss_axi_clk = { 1923 .halt_reg = 0x4d080, 1924 .halt_check = BRANCH_HALT, 1925 .clkr = { 1926 .enable_reg = 0x4d080, 1927 .enable_mask = BIT(0), 1928 .hw.init = &(struct clk_init_data){ 1929 .name = "gcc_mdss_axi_clk", 1930 .ops = &clk_branch2_ops, 1931 }, 1932 }, 1933 }; 1934 1935 static struct clk_branch gcc_mdss_byte0_clk = { 1936 .halt_reg = 0x4d094, 1937 .halt_check = BRANCH_HALT, 1938 .clkr = { 1939 .enable_reg = 0x4d094, 1940 .enable_mask = BIT(0), 1941 .hw.init = &(struct clk_init_data){ 1942 .name = "gcc_mdss_byte0_clk", 1943 .parent_hws = (const struct clk_hw*[]) { 1944 &byte0_clk_src.clkr.hw, 1945 }, 1946 .num_parents = 1, 1947 .flags = CLK_SET_RATE_PARENT, 1948 .ops = &clk_branch2_ops, 1949 }, 1950 }, 1951 }; 1952 1953 static struct clk_branch gcc_mdss_esc0_clk = { 1954 .halt_reg = 0x4d098, 1955 .halt_check = BRANCH_HALT, 1956 .clkr = { 1957 .enable_reg = 0x4d098, 1958 .enable_mask = BIT(0), 1959 .hw.init = &(struct clk_init_data){ 1960 .name = "gcc_mdss_esc0_clk", 1961 .parent_hws = (const struct clk_hw*[]) { 1962 &esc0_clk_src.clkr.hw, 1963 }, 1964 .num_parents = 1, 1965 .flags = CLK_SET_RATE_PARENT, 1966 .ops = &clk_branch2_ops, 1967 }, 1968 }, 1969 }; 1970 1971 static struct clk_branch gcc_mdss_hdmi_app_clk = { 1972 .halt_reg = 0x4d0d8, 1973 .halt_check = BRANCH_HALT, 1974 .clkr = { 1975 .enable_reg = 0x4d0d8, 1976 .enable_mask = BIT(0), 1977 .hw.init = &(struct clk_init_data){ 1978 .name = "gcc_mdss_hdmi_app_clk", 1979 .parent_hws = (const struct clk_hw*[]) { 1980 &hdmi_app_clk_src.clkr.hw, 1981 }, 1982 .num_parents = 1, 1983 .flags = CLK_SET_RATE_PARENT, 1984 .ops = &clk_branch2_ops, 1985 }, 1986 }, 1987 }; 1988 1989 static struct clk_branch gcc_mdss_hdmi_pclk_clk = { 1990 .halt_reg = 0x4d0d4, 1991 .halt_check = BRANCH_HALT, 1992 .clkr = { 1993 .enable_reg = 0x4d0d4, 1994 .enable_mask = BIT(0), 1995 .hw.init = &(struct clk_init_data){ 1996 .name = "gcc_mdss_hdmi_pclk_clk", 1997 .parent_hws = (const struct clk_hw*[]) { 1998 &hdmi_pclk_clk_src.clkr.hw, 1999 }, 2000 .num_parents = 1, 2001 .flags = CLK_SET_RATE_PARENT, 2002 .ops = &clk_branch2_ops, 2003 }, 2004 }, 2005 }; 2006 2007 static struct clk_branch gcc_mdss_mdp_clk = { 2008 .halt_reg = 0x4d088, 2009 .halt_check = BRANCH_HALT, 2010 .clkr = { 2011 .enable_reg = 0x4d088, 2012 .enable_mask = BIT(0), 2013 .hw.init = &(struct clk_init_data){ 2014 .name = "gcc_mdss_mdp_clk", 2015 .parent_hws = (const struct clk_hw*[]) { 2016 &mdp_clk_src.clkr.hw, 2017 }, 2018 .num_parents = 1, 2019 .flags = CLK_SET_RATE_PARENT, 2020 .ops = &clk_branch2_ops, 2021 }, 2022 }, 2023 }; 2024 2025 static struct clk_branch gcc_mdss_pclk0_clk = { 2026 .halt_reg = 0x4d084, 2027 .halt_check = BRANCH_HALT, 2028 .clkr = { 2029 .enable_reg = 0x4d084, 2030 .enable_mask = BIT(0), 2031 .hw.init = &(struct clk_init_data){ 2032 .name = "gcc_mdss_pclk0_clk", 2033 .parent_hws = (const struct clk_hw*[]) { 2034 &pclk0_clk_src.clkr.hw, 2035 }, 2036 .num_parents = 1, 2037 .flags = CLK_SET_RATE_PARENT, 2038 .ops = &clk_branch2_ops, 2039 }, 2040 }, 2041 }; 2042 2043 static struct clk_branch gcc_mdss_vsync_clk = { 2044 .halt_reg = 0x4d090, 2045 .halt_check = BRANCH_HALT, 2046 .clkr = { 2047 .enable_reg = 0x4d090, 2048 .enable_mask = BIT(0), 2049 .hw.init = &(struct clk_init_data){ 2050 .name = "gcc_mdss_vsync_clk", 2051 .parent_hws = (const struct clk_hw*[]) { 2052 &vsync_clk_src.clkr.hw, 2053 }, 2054 .num_parents = 1, 2055 .flags = CLK_SET_RATE_PARENT, 2056 .ops = &clk_branch2_ops, 2057 }, 2058 }, 2059 }; 2060 2061 static struct clk_branch gcc_oxili_ahb_clk = { 2062 .halt_reg = 0x59028, 2063 .halt_check = BRANCH_HALT, 2064 .clkr = { 2065 .enable_reg = 0x59028, 2066 .enable_mask = BIT(0), 2067 .hw.init = &(struct clk_init_data){ 2068 .name = "gcc_oxili_ahb_clk", 2069 .ops = &clk_branch2_ops, 2070 }, 2071 }, 2072 }; 2073 2074 static struct clk_branch gcc_oxili_gfx3d_clk = { 2075 .halt_reg = 0x59020, 2076 .halt_check = BRANCH_HALT, 2077 .clkr = { 2078 .enable_reg = 0x59020, 2079 .enable_mask = BIT(0), 2080 .hw.init = &(struct clk_init_data){ 2081 .name = "gcc_oxili_gfx3d_clk", 2082 .parent_hws = (const struct clk_hw*[]) { 2083 &gfx3d_clk_src.clkr.hw, 2084 }, 2085 .num_parents = 1, 2086 .flags = CLK_SET_RATE_PARENT, 2087 .ops = &clk_branch2_ops, 2088 }, 2089 }, 2090 }; 2091 2092 static struct clk_branch gcc_pcie_0_aux_clk = { 2093 .halt_reg = 0x3e014, 2094 .halt_check = BRANCH_HALT_VOTED, 2095 .clkr = { 2096 .enable_reg = 0x45004, 2097 .enable_mask = BIT(27), 2098 .hw.init = &(struct clk_init_data){ 2099 .name = "gcc_pcie_0_aux_clk", 2100 .parent_hws = (const struct clk_hw*[]) { 2101 &pcie_0_aux_clk_src.clkr.hw, 2102 }, 2103 .num_parents = 1, 2104 .flags = CLK_SET_RATE_PARENT, 2105 .ops = &clk_branch2_ops, 2106 }, 2107 }, 2108 }; 2109 2110 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = { 2111 .halt_reg = 0x3e008, 2112 .halt_check = BRANCH_HALT_VOTED, 2113 .clkr = { 2114 .enable_reg = 0x45004, 2115 .enable_mask = BIT(11), 2116 .hw.init = &(struct clk_init_data){ 2117 .name = "gcc_pcie_0_cfg_ahb_clk", 2118 .ops = &clk_branch2_ops, 2119 }, 2120 }, 2121 }; 2122 2123 static struct clk_branch gcc_pcie_0_mstr_axi_clk = { 2124 .halt_reg = 0x3e018, 2125 .halt_check = BRANCH_HALT_VOTED, 2126 .clkr = { 2127 .enable_reg = 0x45004, 2128 .enable_mask = BIT(18), 2129 .hw.init = &(struct clk_init_data){ 2130 .name = "gcc_pcie_0_mstr_axi_clk", 2131 .ops = &clk_branch2_ops, 2132 }, 2133 }, 2134 }; 2135 2136 static struct clk_branch gcc_pcie_0_pipe_clk = { 2137 .halt_reg = 0x3e00c, 2138 .halt_check = BRANCH_HALT_VOTED, 2139 .clkr = { 2140 .enable_reg = 0x45004, 2141 .enable_mask = BIT(28), 2142 .hw.init = &(struct clk_init_data){ 2143 .name = "gcc_pcie_0_pipe_clk", 2144 .parent_hws = (const struct clk_hw*[]) { 2145 &pcie_0_pipe_clk_src.clkr.hw, 2146 }, 2147 .num_parents = 1, 2148 .flags = CLK_SET_RATE_PARENT, 2149 .ops = &clk_branch2_ops, 2150 }, 2151 }, 2152 }; 2153 2154 static struct clk_branch gcc_pcie_0_slv_axi_clk = { 2155 .halt_reg = 0x3e010, 2156 .halt_check = BRANCH_HALT_VOTED, 2157 .clkr = { 2158 .enable_reg = 0x45004, 2159 .enable_mask = BIT(22), 2160 .hw.init = &(struct clk_init_data){ 2161 .name = "gcc_pcie_0_slv_axi_clk", 2162 .ops = &clk_branch2_ops, 2163 }, 2164 }, 2165 }; 2166 2167 static struct clk_branch gcc_pcnoc_usb2_clk = { 2168 .halt_reg = 0x27008, 2169 .halt_check = BRANCH_HALT, 2170 .clkr = { 2171 .enable_reg = 0x27008, 2172 .enable_mask = BIT(0), 2173 .hw.init = &(struct clk_init_data){ 2174 .name = "gcc_pcnoc_usb2_clk", 2175 .flags = CLK_IS_CRITICAL, 2176 .ops = &clk_branch2_ops, 2177 }, 2178 }, 2179 }; 2180 2181 static struct clk_branch gcc_pcnoc_usb3_clk = { 2182 .halt_reg = 0x2700c, 2183 .halt_check = BRANCH_HALT, 2184 .clkr = { 2185 .enable_reg = 0x2700c, 2186 .enable_mask = BIT(0), 2187 .hw.init = &(struct clk_init_data){ 2188 .name = "gcc_pcnoc_usb3_clk", 2189 .flags = CLK_IS_CRITICAL, 2190 .ops = &clk_branch2_ops, 2191 }, 2192 }, 2193 }; 2194 2195 static struct clk_branch gcc_pdm2_clk = { 2196 .halt_reg = 0x4400c, 2197 .halt_check = BRANCH_HALT, 2198 .clkr = { 2199 .enable_reg = 0x4400c, 2200 .enable_mask = BIT(0), 2201 .hw.init = &(struct clk_init_data){ 2202 .name = "gcc_pdm2_clk", 2203 .parent_hws = (const struct clk_hw*[]) { 2204 &pdm2_clk_src.clkr.hw, 2205 }, 2206 .num_parents = 1, 2207 .flags = CLK_SET_RATE_PARENT, 2208 .ops = &clk_branch2_ops, 2209 }, 2210 }, 2211 }; 2212 2213 static struct clk_branch gcc_pdm_ahb_clk = { 2214 .halt_reg = 0x44004, 2215 .halt_check = BRANCH_HALT, 2216 .clkr = { 2217 .enable_reg = 0x44004, 2218 .enable_mask = BIT(0), 2219 .hw.init = &(struct clk_init_data){ 2220 .name = "gcc_pdm_ahb_clk", 2221 .ops = &clk_branch2_ops, 2222 }, 2223 }, 2224 }; 2225 2226 static struct clk_branch gcc_prng_ahb_clk = { 2227 .halt_reg = 0x13004, 2228 .halt_check = BRANCH_HALT_VOTED, 2229 .clkr = { 2230 .enable_reg = 0x45004, 2231 .enable_mask = BIT(8), 2232 .hw.init = &(struct clk_init_data){ 2233 .name = "gcc_prng_ahb_clk", 2234 .ops = &clk_branch2_ops, 2235 }, 2236 }, 2237 }; 2238 2239 /* PWM clks do not have XO as parent as src clk is a balance root */ 2240 static struct clk_branch gcc_pwm0_xo512_clk = { 2241 .halt_reg = 0x44018, 2242 .halt_check = BRANCH_HALT, 2243 .clkr = { 2244 .enable_reg = 0x44018, 2245 .enable_mask = BIT(0), 2246 .hw.init = &(struct clk_init_data){ 2247 .name = "gcc_pwm0_xo512_clk", 2248 .ops = &clk_branch2_ops, 2249 }, 2250 }, 2251 }; 2252 2253 static struct clk_branch gcc_pwm1_xo512_clk = { 2254 .halt_reg = 0x49004, 2255 .halt_check = BRANCH_HALT, 2256 .clkr = { 2257 .enable_reg = 0x49004, 2258 .enable_mask = BIT(0), 2259 .hw.init = &(struct clk_init_data){ 2260 .name = "gcc_pwm1_xo512_clk", 2261 .ops = &clk_branch2_ops, 2262 }, 2263 }, 2264 }; 2265 2266 static struct clk_branch gcc_pwm2_xo512_clk = { 2267 .halt_reg = 0x4a004, 2268 .halt_check = BRANCH_HALT, 2269 .clkr = { 2270 .enable_reg = 0x4a004, 2271 .enable_mask = BIT(0), 2272 .hw.init = &(struct clk_init_data){ 2273 .name = "gcc_pwm2_xo512_clk", 2274 .ops = &clk_branch2_ops, 2275 }, 2276 }, 2277 }; 2278 2279 static struct clk_branch gcc_qdss_dap_clk = { 2280 .halt_reg = 0x29084, 2281 .halt_check = BRANCH_VOTED, 2282 .clkr = { 2283 .enable_reg = 0x45004, 2284 .enable_mask = BIT(21), 2285 .hw.init = &(struct clk_init_data){ 2286 .name = "gcc_qdss_dap_clk", 2287 .ops = &clk_branch2_ops, 2288 }, 2289 }, 2290 }; 2291 2292 static struct clk_branch gcc_sdcc1_ahb_clk = { 2293 .halt_reg = 0x4201c, 2294 .halt_check = BRANCH_HALT, 2295 .clkr = { 2296 .enable_reg = 0x4201c, 2297 .enable_mask = BIT(0), 2298 .hw.init = &(struct clk_init_data){ 2299 .name = "gcc_sdcc1_ahb_clk", 2300 .ops = &clk_branch2_ops, 2301 }, 2302 }, 2303 }; 2304 2305 static struct clk_branch gcc_sdcc1_apps_clk = { 2306 .halt_reg = 0x42018, 2307 .halt_check = BRANCH_HALT, 2308 .clkr = { 2309 .enable_reg = 0x42018, 2310 .enable_mask = BIT(0), 2311 .hw.init = &(struct clk_init_data){ 2312 .name = "gcc_sdcc1_apps_clk", 2313 .parent_hws = (const struct clk_hw*[]) { 2314 &sdcc1_apps_clk_src.clkr.hw, 2315 }, 2316 .num_parents = 1, 2317 .flags = CLK_SET_RATE_PARENT, 2318 .ops = &clk_branch2_ops, 2319 }, 2320 }, 2321 }; 2322 2323 static struct clk_branch gcc_sdcc1_ice_core_clk = { 2324 .halt_reg = 0x5d014, 2325 .halt_check = BRANCH_HALT, 2326 .clkr = { 2327 .enable_reg = 0x5d014, 2328 .enable_mask = BIT(0), 2329 .hw.init = &(struct clk_init_data){ 2330 .name = "gcc_sdcc1_ice_core_clk", 2331 .parent_hws = (const struct clk_hw*[]) { 2332 &sdcc1_ice_core_clk_src.clkr.hw, 2333 }, 2334 .num_parents = 1, 2335 .flags = CLK_SET_RATE_PARENT, 2336 .ops = &clk_branch2_ops, 2337 }, 2338 }, 2339 }; 2340 2341 static struct clk_branch gcc_cdsp_cfg_ahb_clk = { 2342 .halt_reg = 0x5e004, 2343 .halt_check = BRANCH_HALT, 2344 .clkr = { 2345 .enable_reg = 0x5e004, 2346 .enable_mask = BIT(0), 2347 .hw.init = &(struct clk_init_data) { 2348 .name = "gcc_cdsp_cfg_ahb_cbcr", 2349 .ops = &clk_branch2_ops, 2350 }, 2351 }, 2352 }; 2353 2354 static struct clk_branch gcc_sdcc2_ahb_clk = { 2355 .halt_reg = 0x4301c, 2356 .halt_check = BRANCH_HALT, 2357 .clkr = { 2358 .enable_reg = 0x4301c, 2359 .enable_mask = BIT(0), 2360 .hw.init = &(struct clk_init_data){ 2361 .name = "gcc_sdcc2_ahb_clk", 2362 .ops = &clk_branch2_ops, 2363 }, 2364 }, 2365 }; 2366 2367 static struct clk_branch gcc_sdcc2_apps_clk = { 2368 .halt_reg = 0x43018, 2369 .halt_check = BRANCH_HALT, 2370 .clkr = { 2371 .enable_reg = 0x43018, 2372 .enable_mask = BIT(0), 2373 .hw.init = &(struct clk_init_data){ 2374 .name = "gcc_sdcc2_apps_clk", 2375 .parent_hws = (const struct clk_hw*[]) { 2376 &sdcc2_apps_clk_src.clkr.hw, 2377 }, 2378 .num_parents = 1, 2379 .flags = CLK_SET_RATE_PARENT, 2380 .ops = &clk_branch2_ops, 2381 }, 2382 }, 2383 }; 2384 2385 static struct clk_branch gcc_smmu_cfg_clk = { 2386 .halt_reg = 0x12038, 2387 .halt_check = BRANCH_VOTED, 2388 .clkr = { 2389 .enable_reg = 0x3600C, 2390 .enable_mask = BIT(12), 2391 .hw.init = &(struct clk_init_data){ 2392 .name = "gcc_smmu_cfg_clk", 2393 .ops = &clk_branch2_ops, 2394 }, 2395 }, 2396 }; 2397 2398 static struct clk_branch gcc_sys_noc_usb3_clk = { 2399 .halt_reg = 0x26014, 2400 .halt_check = BRANCH_HALT, 2401 .clkr = { 2402 .enable_reg = 0x26014, 2403 .enable_mask = BIT(0), 2404 .hw.init = &(struct clk_init_data){ 2405 .name = "gcc_sys_noc_usb3_clk", 2406 .parent_hws = (const struct clk_hw*[]) { 2407 &usb30_master_clk_src.clkr.hw, 2408 }, 2409 .num_parents = 1, 2410 .ops = &clk_branch2_ops, 2411 }, 2412 }, 2413 }; 2414 2415 static struct clk_branch gcc_usb_hs_inactivity_timers_clk = { 2416 .halt_reg = 0x4100C, 2417 .halt_check = BRANCH_HALT, 2418 .clkr = { 2419 .enable_reg = 0x4100C, 2420 .enable_mask = BIT(0), 2421 .hw.init = &(struct clk_init_data){ 2422 .name = "gcc_usb_hs_inactivity_timers_clk", 2423 .ops = &clk_branch2_ops, 2424 }, 2425 }, 2426 }; 2427 2428 static struct clk_branch gcc_usb20_mock_utmi_clk = { 2429 .halt_reg = 0x41044, 2430 .halt_check = BRANCH_HALT, 2431 .clkr = { 2432 .enable_reg = 0x41044, 2433 .enable_mask = BIT(0), 2434 .hw.init = &(struct clk_init_data){ 2435 .name = "gcc_usb20_mock_utmi_clk", 2436 .parent_hws = (const struct clk_hw*[]) { 2437 &usb20_mock_utmi_clk_src.clkr.hw, 2438 }, 2439 .num_parents = 1, 2440 .flags = CLK_SET_RATE_PARENT, 2441 .ops = &clk_branch2_ops, 2442 }, 2443 }, 2444 }; 2445 2446 static struct clk_branch gcc_usb2a_phy_sleep_clk = { 2447 .halt_reg = 0x4102c, 2448 .halt_check = BRANCH_HALT, 2449 .clkr = { 2450 .enable_reg = 0x4102c, 2451 .enable_mask = BIT(0), 2452 .hw.init = &(struct clk_init_data){ 2453 .name = "gcc_usb2a_phy_sleep_clk", 2454 .ops = &clk_branch2_ops, 2455 }, 2456 }, 2457 }; 2458 2459 static struct clk_branch gcc_usb30_master_clk = { 2460 .halt_reg = 0x3900c, 2461 .halt_check = BRANCH_HALT, 2462 .clkr = { 2463 .enable_reg = 0x3900c, 2464 .enable_mask = BIT(0), 2465 .hw.init = &(struct clk_init_data){ 2466 .name = "gcc_usb30_master_clk", 2467 .parent_hws = (const struct clk_hw*[]) { 2468 &usb30_master_clk_src.clkr.hw, 2469 }, 2470 .num_parents = 1, 2471 .flags = CLK_SET_RATE_PARENT, 2472 .ops = &clk_branch2_ops, 2473 }, 2474 }, 2475 }; 2476 2477 static struct clk_branch gcc_usb30_mock_utmi_clk = { 2478 .halt_reg = 0x39014, 2479 .halt_check = BRANCH_HALT, 2480 .clkr = { 2481 .enable_reg = 0x39014, 2482 .enable_mask = BIT(0), 2483 .hw.init = &(struct clk_init_data){ 2484 .name = "gcc_usb30_mock_utmi_clk", 2485 .parent_hws = (const struct clk_hw*[]) { 2486 &usb30_mock_utmi_clk_src.clkr.hw, 2487 }, 2488 .num_parents = 1, 2489 .flags = CLK_SET_RATE_PARENT, 2490 .ops = &clk_branch2_ops, 2491 }, 2492 }, 2493 }; 2494 2495 static struct clk_branch gcc_usb30_sleep_clk = { 2496 .halt_reg = 0x39010, 2497 .halt_check = BRANCH_HALT, 2498 .clkr = { 2499 .enable_reg = 0x39010, 2500 .enable_mask = BIT(0), 2501 .hw.init = &(struct clk_init_data){ 2502 .name = "gcc_usb30_sleep_clk", 2503 .ops = &clk_branch2_ops, 2504 }, 2505 }, 2506 }; 2507 2508 static struct clk_branch gcc_usb3_phy_aux_clk = { 2509 .halt_reg = 0x39044, 2510 .halt_check = BRANCH_HALT, 2511 .clkr = { 2512 .enable_reg = 0x39044, 2513 .enable_mask = BIT(0), 2514 .hw.init = &(struct clk_init_data){ 2515 .name = "gcc_usb3_phy_aux_clk", 2516 .parent_hws = (const struct clk_hw*[]) { 2517 &usb3_phy_aux_clk_src.clkr.hw, 2518 }, 2519 .num_parents = 1, 2520 .flags = CLK_SET_RATE_PARENT, 2521 .ops = &clk_branch2_ops, 2522 }, 2523 }, 2524 }; 2525 2526 static struct clk_branch gcc_usb3_phy_pipe_clk = { 2527 .halt_check = BRANCH_HALT_SKIP, 2528 .clkr = { 2529 .enable_reg = 0x39018, 2530 .enable_mask = BIT(0), 2531 .hw.init = &(struct clk_init_data){ 2532 .name = "gcc_usb3_phy_pipe_clk", 2533 .ops = &clk_branch2_ops, 2534 }, 2535 }, 2536 }; 2537 2538 static struct clk_branch gcc_usb_hs_phy_cfg_ahb_clk = { 2539 .halt_reg = 0x41030, 2540 .halt_check = BRANCH_HALT, 2541 .clkr = { 2542 .enable_reg = 0x41030, 2543 .enable_mask = BIT(0), 2544 .hw.init = &(struct clk_init_data){ 2545 .name = "gcc_usb_hs_phy_cfg_ahb_clk", 2546 .ops = &clk_branch2_ops, 2547 }, 2548 }, 2549 }; 2550 2551 static struct clk_branch gcc_usb_hs_system_clk = { 2552 .halt_reg = 0x41004, 2553 .halt_check = BRANCH_HALT, 2554 .clkr = { 2555 .enable_reg = 0x41004, 2556 .enable_mask = BIT(0), 2557 .hw.init = &(struct clk_init_data){ 2558 .name = "gcc_usb_hs_system_clk", 2559 .parent_hws = (const struct clk_hw*[]) { 2560 &usb_hs_system_clk_src.clkr.hw, 2561 }, 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_wdsp_q6ss_ahbs_clk = { 2570 .halt_reg = 0x1e004, 2571 .halt_check = BRANCH_HALT, 2572 .clkr = { 2573 .enable_reg = 0x1e004, 2574 .enable_mask = BIT(0), 2575 .hw.init = &(struct clk_init_data){ 2576 .name = "gcc_wdsp_q6ss_ahbs_clk", 2577 .ops = &clk_branch2_ops, 2578 }, 2579 }, 2580 }; 2581 2582 static struct clk_branch gcc_wdsp_q6ss_axim_clk = { 2583 .halt_reg = 0x1e008, 2584 .halt_check = BRANCH_HALT, 2585 .clkr = { 2586 .enable_reg = 0x1e008, 2587 .enable_mask = BIT(0), 2588 .hw.init = &(struct clk_init_data){ 2589 .name = "gcc_wdsp_q6ss_axim_clk", 2590 .ops = &clk_branch2_ops, 2591 }, 2592 }, 2593 }; 2594 2595 static struct gdsc mdss_gdsc = { 2596 .gdscr = 0x4d078, 2597 .pd = { 2598 .name = "mdss", 2599 }, 2600 .pwrsts = PWRSTS_OFF_ON, 2601 }; 2602 2603 static struct gdsc oxili_gdsc = { 2604 .gdscr = 0x5901c, 2605 .pd = { 2606 .name = "oxili", 2607 }, 2608 .pwrsts = PWRSTS_OFF_ON, 2609 }; 2610 2611 static struct clk_hw *gcc_qcs404_hws[] = { 2612 &cxo.hw, 2613 }; 2614 2615 static struct clk_regmap *gcc_qcs404_clocks[] = { 2616 [GCC_APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr, 2617 [GCC_BLSP1_QUP0_I2C_APPS_CLK_SRC] = &blsp1_qup0_i2c_apps_clk_src.clkr, 2618 [GCC_BLSP1_QUP0_SPI_APPS_CLK_SRC] = &blsp1_qup0_spi_apps_clk_src.clkr, 2619 [GCC_BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr, 2620 [GCC_BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr, 2621 [GCC_BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr, 2622 [GCC_BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr, 2623 [GCC_BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr, 2624 [GCC_BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr, 2625 [GCC_BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr, 2626 [GCC_BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr, 2627 [GCC_BLSP1_UART0_APPS_CLK_SRC] = &blsp1_uart0_apps_clk_src.clkr, 2628 [GCC_BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr, 2629 [GCC_BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr, 2630 [GCC_BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr, 2631 [GCC_BLSP2_QUP0_I2C_APPS_CLK_SRC] = &blsp2_qup0_i2c_apps_clk_src.clkr, 2632 [GCC_BLSP2_QUP0_SPI_APPS_CLK_SRC] = &blsp2_qup0_spi_apps_clk_src.clkr, 2633 [GCC_BLSP2_UART0_APPS_CLK_SRC] = &blsp2_uart0_apps_clk_src.clkr, 2634 [GCC_BYTE0_CLK_SRC] = &byte0_clk_src.clkr, 2635 [GCC_EMAC_CLK_SRC] = &emac_clk_src.clkr, 2636 [GCC_EMAC_PTP_CLK_SRC] = &emac_ptp_clk_src.clkr, 2637 [GCC_ESC0_CLK_SRC] = &esc0_clk_src.clkr, 2638 [GCC_APSS_AHB_CLK] = &gcc_apss_ahb_clk.clkr, 2639 [GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr, 2640 [GCC_BIMC_CDSP_CLK] = &gcc_bimc_cdsp_clk.clkr, 2641 [GCC_BIMC_MDSS_CLK] = &gcc_bimc_mdss_clk.clkr, 2642 [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr, 2643 [GCC_BLSP1_QUP0_I2C_APPS_CLK] = &gcc_blsp1_qup0_i2c_apps_clk.clkr, 2644 [GCC_BLSP1_QUP0_SPI_APPS_CLK] = &gcc_blsp1_qup0_spi_apps_clk.clkr, 2645 [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr, 2646 [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr, 2647 [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr, 2648 [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr, 2649 [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr, 2650 [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr, 2651 [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr, 2652 [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr, 2653 [GCC_BLSP1_UART0_APPS_CLK] = &gcc_blsp1_uart0_apps_clk.clkr, 2654 [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr, 2655 [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr, 2656 [GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr, 2657 [GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr, 2658 [GCC_BLSP2_QUP0_I2C_APPS_CLK] = &gcc_blsp2_qup0_i2c_apps_clk.clkr, 2659 [GCC_BLSP2_QUP0_SPI_APPS_CLK] = &gcc_blsp2_qup0_spi_apps_clk.clkr, 2660 [GCC_BLSP2_UART0_APPS_CLK] = &gcc_blsp2_uart0_apps_clk.clkr, 2661 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr, 2662 [GCC_ETH_AXI_CLK] = &gcc_eth_axi_clk.clkr, 2663 [GCC_ETH_PTP_CLK] = &gcc_eth_ptp_clk.clkr, 2664 [GCC_ETH_RGMII_CLK] = &gcc_eth_rgmii_clk.clkr, 2665 [GCC_ETH_SLAVE_AHB_CLK] = &gcc_eth_slave_ahb_clk.clkr, 2666 [GCC_GENI_IR_S_CLK] = &gcc_geni_ir_s_clk.clkr, 2667 [GCC_GENI_IR_H_CLK] = &gcc_geni_ir_h_clk.clkr, 2668 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr, 2669 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr, 2670 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr, 2671 [GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr, 2672 [GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr, 2673 [GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr, 2674 [GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr, 2675 [GCC_MDSS_HDMI_APP_CLK] = &gcc_mdss_hdmi_app_clk.clkr, 2676 [GCC_MDSS_HDMI_PCLK_CLK] = &gcc_mdss_hdmi_pclk_clk.clkr, 2677 [GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr, 2678 [GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr, 2679 [GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr, 2680 [GCC_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr, 2681 [GCC_OXILI_GFX3D_CLK] = &gcc_oxili_gfx3d_clk.clkr, 2682 [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr, 2683 [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr, 2684 [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr, 2685 [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr, 2686 [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr, 2687 [GCC_PCNOC_USB2_CLK] = &gcc_pcnoc_usb2_clk.clkr, 2688 [GCC_PCNOC_USB3_CLK] = &gcc_pcnoc_usb3_clk.clkr, 2689 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr, 2690 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr, 2691 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr, 2692 [GCC_PWM0_XO512_CLK] = &gcc_pwm0_xo512_clk.clkr, 2693 [GCC_PWM1_XO512_CLK] = &gcc_pwm1_xo512_clk.clkr, 2694 [GCC_PWM2_XO512_CLK] = &gcc_pwm2_xo512_clk.clkr, 2695 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr, 2696 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr, 2697 [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr, 2698 [GCC_CDSP_CFG_AHB_CLK] = &gcc_cdsp_cfg_ahb_clk.clkr, 2699 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr, 2700 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr, 2701 [GCC_SYS_NOC_USB3_CLK] = &gcc_sys_noc_usb3_clk.clkr, 2702 [GCC_USB20_MOCK_UTMI_CLK] = &gcc_usb20_mock_utmi_clk.clkr, 2703 [GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr, 2704 [GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr, 2705 [GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr, 2706 [GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr, 2707 [GCC_USB3_PHY_AUX_CLK] = &gcc_usb3_phy_aux_clk.clkr, 2708 [GCC_USB3_PHY_PIPE_CLK] = &gcc_usb3_phy_pipe_clk.clkr, 2709 [GCC_USB_HS_PHY_CFG_AHB_CLK] = &gcc_usb_hs_phy_cfg_ahb_clk.clkr, 2710 [GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr, 2711 [GCC_GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr, 2712 [GCC_GP1_CLK_SRC] = &gp1_clk_src.clkr, 2713 [GCC_GP2_CLK_SRC] = &gp2_clk_src.clkr, 2714 [GCC_GP3_CLK_SRC] = &gp3_clk_src.clkr, 2715 [GCC_GPLL0_OUT_MAIN] = &gpll0_out_main.clkr, 2716 [GCC_GPLL0_AO_OUT_MAIN] = &gpll0_ao_out_main.clkr, 2717 [GCC_GPLL0_SLEEP_CLK_SRC] = &gpll0_sleep_clk_src.clkr, 2718 [GCC_GPLL1_OUT_MAIN] = &gpll1_out_main.clkr, 2719 [GCC_GPLL3_OUT_MAIN] = &gpll3_out_main.clkr, 2720 [GCC_GPLL4_OUT_MAIN] = &gpll4_out_main.clkr, 2721 [GCC_GPLL6] = &gpll6.clkr, 2722 [GCC_GPLL6_OUT_AUX] = &gpll6_out_aux, 2723 [GCC_HDMI_APP_CLK_SRC] = &hdmi_app_clk_src.clkr, 2724 [GCC_HDMI_PCLK_CLK_SRC] = &hdmi_pclk_clk_src.clkr, 2725 [GCC_MDP_CLK_SRC] = &mdp_clk_src.clkr, 2726 [GCC_PCIE_0_AUX_CLK_SRC] = &pcie_0_aux_clk_src.clkr, 2727 [GCC_PCIE_0_PIPE_CLK_SRC] = &pcie_0_pipe_clk_src.clkr, 2728 [GCC_PCLK0_CLK_SRC] = &pclk0_clk_src.clkr, 2729 [GCC_PDM2_CLK_SRC] = &pdm2_clk_src.clkr, 2730 [GCC_SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr, 2731 [GCC_SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr, 2732 [GCC_SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr, 2733 [GCC_USB20_MOCK_UTMI_CLK_SRC] = &usb20_mock_utmi_clk_src.clkr, 2734 [GCC_USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr, 2735 [GCC_USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr, 2736 [GCC_USB3_PHY_AUX_CLK_SRC] = &usb3_phy_aux_clk_src.clkr, 2737 [GCC_USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr, 2738 [GCC_VSYNC_CLK_SRC] = &vsync_clk_src.clkr, 2739 [GCC_CDSP_BIMC_CLK_SRC] = &cdsp_bimc_clk_src.clkr, 2740 [GCC_USB_HS_INACTIVITY_TIMERS_CLK] = 2741 &gcc_usb_hs_inactivity_timers_clk.clkr, 2742 [GCC_BIMC_GPU_CLK] = &gcc_bimc_gpu_clk.clkr, 2743 [GCC_GTCU_AHB_CLK] = &gcc_gtcu_ahb_clk.clkr, 2744 [GCC_GFX_TCU_CLK] = &gcc_gfx_tcu_clk.clkr, 2745 [GCC_GFX_TBU_CLK] = &gcc_gfx_tbu_clk.clkr, 2746 [GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr, 2747 [GCC_APSS_TCU_CLK] = &gcc_apss_tcu_clk.clkr, 2748 [GCC_CDSP_TBU_CLK] = &gcc_cdsp_tbu_clk.clkr, 2749 [GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr, 2750 [GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr, 2751 [GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr, 2752 [GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr, 2753 [GCC_QDSS_DAP_CLK] = &gcc_qdss_dap_clk.clkr, 2754 [GCC_DCC_CLK] = &gcc_dcc_clk.clkr, 2755 [GCC_DCC_XO_CLK] = &gcc_dcc_xo_clk.clkr, 2756 [GCC_WCSS_Q6_AHB_CLK] = &gcc_wdsp_q6ss_ahbs_clk.clkr, 2757 [GCC_WCSS_Q6_AXIM_CLK] = &gcc_wdsp_q6ss_axim_clk.clkr, 2758 2759 }; 2760 2761 static struct gdsc *gcc_qcs404_gdscs[] = { 2762 [MDSS_GDSC] = &mdss_gdsc, 2763 [OXILI_GDSC] = &oxili_gdsc, 2764 }; 2765 2766 static const struct qcom_reset_map gcc_qcs404_resets[] = { 2767 [GCC_GENI_IR_BCR] = { 0x0F000 }, 2768 [GCC_CDSP_RESTART] = { 0x18000 }, 2769 [GCC_USB_HS_BCR] = { 0x41000 }, 2770 [GCC_USB2_HS_PHY_ONLY_BCR] = { 0x41034 }, 2771 [GCC_QUSB2_PHY_BCR] = { 0x4103c }, 2772 [GCC_USB_HS_PHY_CFG_AHB_BCR] = { 0x0000c, 1 }, 2773 [GCC_USB2A_PHY_BCR] = { 0x0000c, 0 }, 2774 [GCC_USB3_PHY_BCR] = { 0x39004 }, 2775 [GCC_USB_30_BCR] = { 0x39000 }, 2776 [GCC_USB3PHY_PHY_BCR] = { 0x39008 }, 2777 [GCC_PCIE_0_BCR] = { 0x3e000 }, 2778 [GCC_PCIE_0_PHY_BCR] = { 0x3e004 }, 2779 [GCC_PCIE_0_LINK_DOWN_BCR] = { 0x3e038 }, 2780 [GCC_PCIEPHY_0_PHY_BCR] = { 0x3e03c }, 2781 [GCC_PCIE_0_AXI_MASTER_STICKY_ARES] = { 0x3e040, 6}, 2782 [GCC_PCIE_0_AHB_ARES] = { 0x3e040, 5 }, 2783 [GCC_PCIE_0_AXI_SLAVE_ARES] = { 0x3e040, 4 }, 2784 [GCC_PCIE_0_AXI_MASTER_ARES] = { 0x3e040, 3 }, 2785 [GCC_PCIE_0_CORE_STICKY_ARES] = { 0x3e040, 2 }, 2786 [GCC_PCIE_0_SLEEP_ARES] = { 0x3e040, 1 }, 2787 [GCC_PCIE_0_PIPE_ARES] = { 0x3e040, 0 }, 2788 [GCC_EMAC_BCR] = { 0x4e000 }, 2789 [GCC_WDSP_RESTART] = {0x19000}, 2790 }; 2791 2792 static const struct regmap_config gcc_qcs404_regmap_config = { 2793 .reg_bits = 32, 2794 .reg_stride = 4, 2795 .val_bits = 32, 2796 .max_register = 0x7f000, 2797 .fast_io = true, 2798 }; 2799 2800 static const struct qcom_cc_desc gcc_qcs404_desc = { 2801 .config = &gcc_qcs404_regmap_config, 2802 .clks = gcc_qcs404_clocks, 2803 .num_clks = ARRAY_SIZE(gcc_qcs404_clocks), 2804 .resets = gcc_qcs404_resets, 2805 .num_resets = ARRAY_SIZE(gcc_qcs404_resets), 2806 .clk_hws = gcc_qcs404_hws, 2807 .num_clk_hws = ARRAY_SIZE(gcc_qcs404_hws), 2808 .gdscs = gcc_qcs404_gdscs, 2809 .num_gdscs = ARRAY_SIZE(gcc_qcs404_gdscs), 2810 }; 2811 2812 static const struct of_device_id gcc_qcs404_match_table[] = { 2813 { .compatible = "qcom,gcc-qcs404" }, 2814 { } 2815 }; 2816 MODULE_DEVICE_TABLE(of, gcc_qcs404_match_table); 2817 2818 static int gcc_qcs404_probe(struct platform_device *pdev) 2819 { 2820 struct regmap *regmap; 2821 2822 regmap = qcom_cc_map(pdev, &gcc_qcs404_desc); 2823 if (IS_ERR(regmap)) 2824 return PTR_ERR(regmap); 2825 2826 clk_alpha_pll_configure(&gpll3_out_main, regmap, &gpll3_config); 2827 2828 return qcom_cc_really_probe(pdev, &gcc_qcs404_desc, regmap); 2829 } 2830 2831 static struct platform_driver gcc_qcs404_driver = { 2832 .probe = gcc_qcs404_probe, 2833 .driver = { 2834 .name = "gcc-qcs404", 2835 .of_match_table = gcc_qcs404_match_table, 2836 }, 2837 }; 2838 2839 static int __init gcc_qcs404_init(void) 2840 { 2841 return platform_driver_register(&gcc_qcs404_driver); 2842 } 2843 core_initcall(gcc_qcs404_init); 2844 2845 static void __exit gcc_qcs404_exit(void) 2846 { 2847 platform_driver_unregister(&gcc_qcs404_driver); 2848 } 2849 module_exit(gcc_qcs404_exit); 2850 2851 MODULE_DESCRIPTION("Qualcomm GCC QCS404 Driver"); 2852 MODULE_LICENSE("GPL v2"); 2853