1 // SPDX-License-Identifier: GPL-2.0-only 2 /* Copyright (c) 2013-2016, The Linux Foundation. All rights reserved. 3 */ 4 5 #include <linux/kernel.h> 6 #include <linux/init.h> 7 #include <linux/err.h> 8 #include <linux/ctype.h> 9 #include <linux/io.h> 10 #include <linux/of.h> 11 #include <linux/platform_device.h> 12 #include <linux/module.h> 13 #include <linux/regmap.h> 14 15 #include <dt-bindings/clock/qcom,gcc-msm8994.h> 16 17 #include "common.h" 18 #include "clk-regmap.h" 19 #include "clk-alpha-pll.h" 20 #include "clk-rcg.h" 21 #include "clk-branch.h" 22 #include "reset.h" 23 #include "gdsc.h" 24 25 enum { 26 P_XO, 27 P_GPLL0, 28 P_GPLL4, 29 }; 30 31 static const struct parent_map gcc_xo_gpll0_map[] = { 32 { P_XO, 0 }, 33 { P_GPLL0, 1 }, 34 }; 35 36 static const char * const gcc_xo_gpll0[] = { 37 "xo", 38 "gpll0", 39 }; 40 41 static const struct parent_map gcc_xo_gpll0_gpll4_map[] = { 42 { P_XO, 0 }, 43 { P_GPLL0, 1 }, 44 { P_GPLL4, 5 }, 45 }; 46 47 static const char * const gcc_xo_gpll0_gpll4[] = { 48 "xo", 49 "gpll0", 50 "gpll4", 51 }; 52 53 static struct clk_fixed_factor xo = { 54 .mult = 1, 55 .div = 1, 56 .hw.init = &(struct clk_init_data) 57 { 58 .name = "xo", 59 .parent_names = (const char *[]) { "xo_board" }, 60 .num_parents = 1, 61 .ops = &clk_fixed_factor_ops, 62 }, 63 }; 64 65 static struct clk_alpha_pll gpll0_early = { 66 .offset = 0x00000, 67 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 68 .clkr = { 69 .enable_reg = 0x1480, 70 .enable_mask = BIT(0), 71 .hw.init = &(struct clk_init_data) 72 { 73 .name = "gpll0_early", 74 .parent_names = (const char *[]) { "xo" }, 75 .num_parents = 1, 76 .ops = &clk_alpha_pll_ops, 77 }, 78 }, 79 }; 80 81 static struct clk_alpha_pll_postdiv gpll0 = { 82 .offset = 0x00000, 83 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 84 .clkr.hw.init = &(struct clk_init_data) 85 { 86 .name = "gpll0", 87 .parent_names = (const char *[]) { "gpll0_early" }, 88 .num_parents = 1, 89 .ops = &clk_alpha_pll_postdiv_ops, 90 }, 91 }; 92 93 static struct clk_alpha_pll gpll4_early = { 94 .offset = 0x1dc0, 95 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 96 .clkr = { 97 .enable_reg = 0x1480, 98 .enable_mask = BIT(4), 99 .hw.init = &(struct clk_init_data) 100 { 101 .name = "gpll4_early", 102 .parent_names = (const char *[]) { "xo" }, 103 .num_parents = 1, 104 .ops = &clk_alpha_pll_ops, 105 }, 106 }, 107 }; 108 109 static struct clk_alpha_pll_postdiv gpll4 = { 110 .offset = 0x1dc0, 111 .width = 4, 112 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 113 .clkr.hw.init = &(struct clk_init_data) 114 { 115 .name = "gpll4", 116 .parent_names = (const char *[]) { "gpll4_early" }, 117 .num_parents = 1, 118 .ops = &clk_alpha_pll_postdiv_ops, 119 }, 120 }; 121 122 static struct freq_tbl ftbl_ufs_axi_clk_src[] = { 123 F(50000000, P_GPLL0, 12, 0, 0), 124 F(100000000, P_GPLL0, 6, 0, 0), 125 F(150000000, P_GPLL0, 4, 0, 0), 126 F(171430000, P_GPLL0, 3.5, 0, 0), 127 F(200000000, P_GPLL0, 3, 0, 0), 128 F(240000000, P_GPLL0, 2.5, 0, 0), 129 { } 130 }; 131 132 static struct clk_rcg2 ufs_axi_clk_src = { 133 .cmd_rcgr = 0x1d68, 134 .mnd_width = 8, 135 .hid_width = 5, 136 .parent_map = gcc_xo_gpll0_map, 137 .freq_tbl = ftbl_ufs_axi_clk_src, 138 .clkr.hw.init = &(struct clk_init_data) 139 { 140 .name = "ufs_axi_clk_src", 141 .parent_names = gcc_xo_gpll0, 142 .num_parents = 2, 143 .ops = &clk_rcg2_ops, 144 }, 145 }; 146 147 static struct freq_tbl ftbl_usb30_master_clk_src[] = { 148 F(19200000, P_XO, 1, 0, 0), 149 F(125000000, P_GPLL0, 1, 5, 24), 150 { } 151 }; 152 153 static struct clk_rcg2 usb30_master_clk_src = { 154 .cmd_rcgr = 0x03d4, 155 .mnd_width = 8, 156 .hid_width = 5, 157 .parent_map = gcc_xo_gpll0_map, 158 .freq_tbl = ftbl_usb30_master_clk_src, 159 .clkr.hw.init = &(struct clk_init_data) 160 { 161 .name = "usb30_master_clk_src", 162 .parent_names = gcc_xo_gpll0, 163 .num_parents = 2, 164 .ops = &clk_rcg2_ops, 165 }, 166 }; 167 168 static struct freq_tbl ftbl_blsp_i2c_apps_clk_src[] = { 169 F(19200000, P_XO, 1, 0, 0), 170 F(50000000, P_GPLL0, 12, 0, 0), 171 { } 172 }; 173 174 static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = { 175 .cmd_rcgr = 0x0660, 176 .hid_width = 5, 177 .parent_map = gcc_xo_gpll0_map, 178 .freq_tbl = ftbl_blsp_i2c_apps_clk_src, 179 .clkr.hw.init = &(struct clk_init_data) 180 { 181 .name = "blsp1_qup1_i2c_apps_clk_src", 182 .parent_names = gcc_xo_gpll0, 183 .num_parents = 2, 184 .ops = &clk_rcg2_ops, 185 }, 186 }; 187 188 static struct freq_tbl ftbl_blspqup_spi_apps_clk_src[] = { 189 F(960000, P_XO, 10, 1, 2), 190 F(4800000, P_XO, 4, 0, 0), 191 F(9600000, P_XO, 2, 0, 0), 192 F(15000000, P_GPLL0, 10, 1, 4), 193 F(19200000, P_XO, 1, 0, 0), 194 F(24000000, P_GPLL0, 12.5, 1, 2), 195 F(25000000, P_GPLL0, 12, 1, 2), 196 F(48000000, P_GPLL0, 12.5, 0, 0), 197 F(50000000, P_GPLL0, 12, 0, 0), 198 { } 199 }; 200 201 static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = { 202 .cmd_rcgr = 0x064c, 203 .mnd_width = 8, 204 .hid_width = 5, 205 .parent_map = gcc_xo_gpll0_map, 206 .freq_tbl = ftbl_blspqup_spi_apps_clk_src, 207 .clkr.hw.init = &(struct clk_init_data) 208 { 209 .name = "blsp1_qup1_spi_apps_clk_src", 210 .parent_names = gcc_xo_gpll0, 211 .num_parents = 2, 212 .ops = &clk_rcg2_ops, 213 }, 214 }; 215 216 static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = { 217 .cmd_rcgr = 0x06e0, 218 .hid_width = 5, 219 .parent_map = gcc_xo_gpll0_map, 220 .freq_tbl = ftbl_blsp_i2c_apps_clk_src, 221 .clkr.hw.init = &(struct clk_init_data) 222 { 223 .name = "blsp1_qup2_i2c_apps_clk_src", 224 .parent_names = gcc_xo_gpll0, 225 .num_parents = 2, 226 .ops = &clk_rcg2_ops, 227 }, 228 }; 229 230 static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = { 231 .cmd_rcgr = 0x06cc, 232 .mnd_width = 8, 233 .hid_width = 5, 234 .parent_map = gcc_xo_gpll0_map, 235 .freq_tbl = ftbl_blspqup_spi_apps_clk_src, 236 .clkr.hw.init = &(struct clk_init_data) 237 { 238 .name = "blsp1_qup2_spi_apps_clk_src", 239 .parent_names = gcc_xo_gpll0, 240 .num_parents = 2, 241 .ops = &clk_rcg2_ops, 242 }, 243 }; 244 245 static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = { 246 .cmd_rcgr = 0x0760, 247 .hid_width = 5, 248 .parent_map = gcc_xo_gpll0_map, 249 .freq_tbl = ftbl_blsp_i2c_apps_clk_src, 250 .clkr.hw.init = &(struct clk_init_data) 251 { 252 .name = "blsp1_qup3_i2c_apps_clk_src", 253 .parent_names = gcc_xo_gpll0, 254 .num_parents = 2, 255 .ops = &clk_rcg2_ops, 256 }, 257 }; 258 259 static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = { 260 .cmd_rcgr = 0x074c, 261 .mnd_width = 8, 262 .hid_width = 5, 263 .parent_map = gcc_xo_gpll0_map, 264 .freq_tbl = ftbl_blspqup_spi_apps_clk_src, 265 .clkr.hw.init = &(struct clk_init_data) 266 { 267 .name = "blsp1_qup3_spi_apps_clk_src", 268 .parent_names = gcc_xo_gpll0, 269 .num_parents = 2, 270 .ops = &clk_rcg2_ops, 271 }, 272 }; 273 274 static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = { 275 .cmd_rcgr = 0x07e0, 276 .hid_width = 5, 277 .parent_map = gcc_xo_gpll0_map, 278 .freq_tbl = ftbl_blsp_i2c_apps_clk_src, 279 .clkr.hw.init = &(struct clk_init_data) 280 { 281 .name = "blsp1_qup4_i2c_apps_clk_src", 282 .parent_names = gcc_xo_gpll0, 283 .num_parents = 2, 284 .ops = &clk_rcg2_ops, 285 }, 286 }; 287 288 static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = { 289 .cmd_rcgr = 0x07cc, 290 .mnd_width = 8, 291 .hid_width = 5, 292 .parent_map = gcc_xo_gpll0_map, 293 .freq_tbl = ftbl_blspqup_spi_apps_clk_src, 294 .clkr.hw.init = &(struct clk_init_data) 295 { 296 .name = "blsp1_qup4_spi_apps_clk_src", 297 .parent_names = gcc_xo_gpll0, 298 .num_parents = 2, 299 .ops = &clk_rcg2_ops, 300 }, 301 }; 302 303 static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = { 304 .cmd_rcgr = 0x0860, 305 .hid_width = 5, 306 .parent_map = gcc_xo_gpll0_map, 307 .freq_tbl = ftbl_blsp_i2c_apps_clk_src, 308 .clkr.hw.init = &(struct clk_init_data) 309 { 310 .name = "blsp1_qup5_i2c_apps_clk_src", 311 .parent_names = gcc_xo_gpll0, 312 .num_parents = 2, 313 .ops = &clk_rcg2_ops, 314 }, 315 }; 316 317 static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = { 318 .cmd_rcgr = 0x084c, 319 .mnd_width = 8, 320 .hid_width = 5, 321 .parent_map = gcc_xo_gpll0_map, 322 .freq_tbl = ftbl_blspqup_spi_apps_clk_src, 323 .clkr.hw.init = &(struct clk_init_data) 324 { 325 .name = "blsp1_qup5_spi_apps_clk_src", 326 .parent_names = gcc_xo_gpll0, 327 .num_parents = 2, 328 .ops = &clk_rcg2_ops, 329 }, 330 }; 331 332 static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = { 333 .cmd_rcgr = 0x08e0, 334 .hid_width = 5, 335 .parent_map = gcc_xo_gpll0_map, 336 .freq_tbl = ftbl_blsp_i2c_apps_clk_src, 337 .clkr.hw.init = &(struct clk_init_data) 338 { 339 .name = "blsp1_qup6_i2c_apps_clk_src", 340 .parent_names = gcc_xo_gpll0, 341 .num_parents = 2, 342 .ops = &clk_rcg2_ops, 343 }, 344 }; 345 346 static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = { 347 .cmd_rcgr = 0x08cc, 348 .mnd_width = 8, 349 .hid_width = 5, 350 .parent_map = gcc_xo_gpll0_map, 351 .freq_tbl = ftbl_blspqup_spi_apps_clk_src, 352 .clkr.hw.init = &(struct clk_init_data) 353 { 354 .name = "blsp1_qup6_spi_apps_clk_src", 355 .parent_names = gcc_xo_gpll0, 356 .num_parents = 2, 357 .ops = &clk_rcg2_ops, 358 }, 359 }; 360 361 static struct freq_tbl ftbl_blsp_uart_apps_clk_src[] = { 362 F(3686400, P_GPLL0, 1, 96, 15625), 363 F(7372800, P_GPLL0, 1, 192, 15625), 364 F(14745600, P_GPLL0, 1, 384, 15625), 365 F(16000000, P_GPLL0, 5, 2, 15), 366 F(19200000, P_XO, 1, 0, 0), 367 F(24000000, P_GPLL0, 5, 1, 5), 368 F(32000000, P_GPLL0, 1, 4, 75), 369 F(40000000, P_GPLL0, 15, 0, 0), 370 F(46400000, P_GPLL0, 1, 29, 375), 371 F(48000000, P_GPLL0, 12.5, 0, 0), 372 F(51200000, P_GPLL0, 1, 32, 375), 373 F(56000000, P_GPLL0, 1, 7, 75), 374 F(58982400, P_GPLL0, 1, 1536, 15625), 375 F(60000000, P_GPLL0, 10, 0, 0), 376 F(63160000, P_GPLL0, 9.5, 0, 0), 377 { } 378 }; 379 380 static struct clk_rcg2 blsp1_uart1_apps_clk_src = { 381 .cmd_rcgr = 0x068c, 382 .mnd_width = 16, 383 .hid_width = 5, 384 .parent_map = gcc_xo_gpll0_map, 385 .freq_tbl = ftbl_blsp_uart_apps_clk_src, 386 .clkr.hw.init = &(struct clk_init_data) 387 { 388 .name = "blsp1_uart1_apps_clk_src", 389 .parent_names = gcc_xo_gpll0, 390 .num_parents = 2, 391 .ops = &clk_rcg2_ops, 392 }, 393 }; 394 395 static struct clk_rcg2 blsp1_uart2_apps_clk_src = { 396 .cmd_rcgr = 0x070c, 397 .mnd_width = 16, 398 .hid_width = 5, 399 .parent_map = gcc_xo_gpll0_map, 400 .freq_tbl = ftbl_blsp_uart_apps_clk_src, 401 .clkr.hw.init = &(struct clk_init_data) 402 { 403 .name = "blsp1_uart2_apps_clk_src", 404 .parent_names = gcc_xo_gpll0, 405 .num_parents = 2, 406 .ops = &clk_rcg2_ops, 407 }, 408 }; 409 410 static struct clk_rcg2 blsp1_uart3_apps_clk_src = { 411 .cmd_rcgr = 0x078c, 412 .mnd_width = 16, 413 .hid_width = 5, 414 .parent_map = gcc_xo_gpll0_map, 415 .freq_tbl = ftbl_blsp_uart_apps_clk_src, 416 .clkr.hw.init = &(struct clk_init_data) 417 { 418 .name = "blsp1_uart3_apps_clk_src", 419 .parent_names = gcc_xo_gpll0, 420 .num_parents = 2, 421 .ops = &clk_rcg2_ops, 422 }, 423 }; 424 425 static struct clk_rcg2 blsp1_uart4_apps_clk_src = { 426 .cmd_rcgr = 0x080c, 427 .mnd_width = 16, 428 .hid_width = 5, 429 .parent_map = gcc_xo_gpll0_map, 430 .freq_tbl = ftbl_blsp_uart_apps_clk_src, 431 .clkr.hw.init = &(struct clk_init_data) 432 { 433 .name = "blsp1_uart4_apps_clk_src", 434 .parent_names = gcc_xo_gpll0, 435 .num_parents = 2, 436 .ops = &clk_rcg2_ops, 437 }, 438 }; 439 440 static struct clk_rcg2 blsp1_uart5_apps_clk_src = { 441 .cmd_rcgr = 0x088c, 442 .mnd_width = 16, 443 .hid_width = 5, 444 .parent_map = gcc_xo_gpll0_map, 445 .freq_tbl = ftbl_blsp_uart_apps_clk_src, 446 .clkr.hw.init = &(struct clk_init_data) 447 { 448 .name = "blsp1_uart5_apps_clk_src", 449 .parent_names = gcc_xo_gpll0, 450 .num_parents = 2, 451 .ops = &clk_rcg2_ops, 452 }, 453 }; 454 455 static struct clk_rcg2 blsp1_uart6_apps_clk_src = { 456 .cmd_rcgr = 0x090c, 457 .mnd_width = 16, 458 .hid_width = 5, 459 .parent_map = gcc_xo_gpll0_map, 460 .freq_tbl = ftbl_blsp_uart_apps_clk_src, 461 .clkr.hw.init = &(struct clk_init_data) 462 { 463 .name = "blsp1_uart6_apps_clk_src", 464 .parent_names = gcc_xo_gpll0, 465 .num_parents = 2, 466 .ops = &clk_rcg2_ops, 467 }, 468 }; 469 470 static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = { 471 .cmd_rcgr = 0x09a0, 472 .hid_width = 5, 473 .parent_map = gcc_xo_gpll0_map, 474 .freq_tbl = ftbl_blsp_i2c_apps_clk_src, 475 .clkr.hw.init = &(struct clk_init_data) 476 { 477 .name = "blsp2_qup1_i2c_apps_clk_src", 478 .parent_names = gcc_xo_gpll0, 479 .num_parents = 2, 480 .ops = &clk_rcg2_ops, 481 }, 482 }; 483 484 static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = { 485 .cmd_rcgr = 0x098c, 486 .mnd_width = 8, 487 .hid_width = 5, 488 .parent_map = gcc_xo_gpll0_map, 489 .freq_tbl = ftbl_blspqup_spi_apps_clk_src, 490 .clkr.hw.init = &(struct clk_init_data) 491 { 492 .name = "blsp2_qup1_spi_apps_clk_src", 493 .parent_names = gcc_xo_gpll0, 494 .num_parents = 2, 495 .ops = &clk_rcg2_ops, 496 }, 497 }; 498 499 static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = { 500 .cmd_rcgr = 0x0a20, 501 .hid_width = 5, 502 .parent_map = gcc_xo_gpll0_map, 503 .freq_tbl = ftbl_blsp_i2c_apps_clk_src, 504 .clkr.hw.init = &(struct clk_init_data) 505 { 506 .name = "blsp2_qup2_i2c_apps_clk_src", 507 .parent_names = gcc_xo_gpll0, 508 .num_parents = 2, 509 .ops = &clk_rcg2_ops, 510 }, 511 }; 512 513 static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = { 514 .cmd_rcgr = 0x0a0c, 515 .mnd_width = 8, 516 .hid_width = 5, 517 .parent_map = gcc_xo_gpll0_map, 518 .freq_tbl = ftbl_blspqup_spi_apps_clk_src, 519 .clkr.hw.init = &(struct clk_init_data) 520 { 521 .name = "blsp2_qup2_spi_apps_clk_src", 522 .parent_names = gcc_xo_gpll0, 523 .num_parents = 2, 524 .ops = &clk_rcg2_ops, 525 }, 526 }; 527 528 static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = { 529 .cmd_rcgr = 0x0aa0, 530 .hid_width = 5, 531 .parent_map = gcc_xo_gpll0_map, 532 .freq_tbl = ftbl_blsp_i2c_apps_clk_src, 533 .clkr.hw.init = &(struct clk_init_data) 534 { 535 .name = "blsp2_qup3_i2c_apps_clk_src", 536 .parent_names = gcc_xo_gpll0, 537 .num_parents = 2, 538 .ops = &clk_rcg2_ops, 539 }, 540 }; 541 542 static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = { 543 .cmd_rcgr = 0x0a8c, 544 .mnd_width = 8, 545 .hid_width = 5, 546 .parent_map = gcc_xo_gpll0_map, 547 .freq_tbl = ftbl_blspqup_spi_apps_clk_src, 548 .clkr.hw.init = &(struct clk_init_data) 549 { 550 .name = "blsp2_qup3_spi_apps_clk_src", 551 .parent_names = gcc_xo_gpll0, 552 .num_parents = 2, 553 .ops = &clk_rcg2_ops, 554 }, 555 }; 556 557 static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = { 558 .cmd_rcgr = 0x0b20, 559 .hid_width = 5, 560 .parent_map = gcc_xo_gpll0_map, 561 .freq_tbl = ftbl_blsp_i2c_apps_clk_src, 562 .clkr.hw.init = &(struct clk_init_data) 563 { 564 .name = "blsp2_qup4_i2c_apps_clk_src", 565 .parent_names = gcc_xo_gpll0, 566 .num_parents = 2, 567 .ops = &clk_rcg2_ops, 568 }, 569 }; 570 571 static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = { 572 .cmd_rcgr = 0x0b0c, 573 .mnd_width = 8, 574 .hid_width = 5, 575 .parent_map = gcc_xo_gpll0_map, 576 .freq_tbl = ftbl_blspqup_spi_apps_clk_src, 577 .clkr.hw.init = &(struct clk_init_data) 578 { 579 .name = "blsp2_qup4_spi_apps_clk_src", 580 .parent_names = gcc_xo_gpll0, 581 .num_parents = 2, 582 .ops = &clk_rcg2_ops, 583 }, 584 }; 585 586 static struct clk_rcg2 blsp2_qup5_i2c_apps_clk_src = { 587 .cmd_rcgr = 0x0ba0, 588 .hid_width = 5, 589 .parent_map = gcc_xo_gpll0_map, 590 .freq_tbl = ftbl_blsp_i2c_apps_clk_src, 591 .clkr.hw.init = &(struct clk_init_data) 592 { 593 .name = "blsp2_qup5_i2c_apps_clk_src", 594 .parent_names = gcc_xo_gpll0, 595 .num_parents = 2, 596 .ops = &clk_rcg2_ops, 597 }, 598 }; 599 600 static struct clk_rcg2 blsp2_qup5_spi_apps_clk_src = { 601 .cmd_rcgr = 0x0b8c, 602 .mnd_width = 8, 603 .hid_width = 5, 604 .parent_map = gcc_xo_gpll0_map, 605 .freq_tbl = ftbl_blspqup_spi_apps_clk_src, 606 .clkr.hw.init = &(struct clk_init_data) 607 { 608 .name = "blsp2_qup5_spi_apps_clk_src", 609 .parent_names = gcc_xo_gpll0, 610 .num_parents = 2, 611 .ops = &clk_rcg2_ops, 612 }, 613 }; 614 615 static struct clk_rcg2 blsp2_qup6_i2c_apps_clk_src = { 616 .cmd_rcgr = 0x0c20, 617 .hid_width = 5, 618 .parent_map = gcc_xo_gpll0_map, 619 .freq_tbl = ftbl_blsp_i2c_apps_clk_src, 620 .clkr.hw.init = &(struct clk_init_data) 621 { 622 .name = "blsp2_qup6_i2c_apps_clk_src", 623 .parent_names = gcc_xo_gpll0, 624 .num_parents = 2, 625 .ops = &clk_rcg2_ops, 626 }, 627 }; 628 629 static struct clk_rcg2 blsp2_qup6_spi_apps_clk_src = { 630 .cmd_rcgr = 0x0c0c, 631 .mnd_width = 8, 632 .hid_width = 5, 633 .parent_map = gcc_xo_gpll0_map, 634 .freq_tbl = ftbl_blspqup_spi_apps_clk_src, 635 .clkr.hw.init = &(struct clk_init_data) 636 { 637 .name = "blsp2_qup6_spi_apps_clk_src", 638 .parent_names = gcc_xo_gpll0, 639 .num_parents = 2, 640 .ops = &clk_rcg2_ops, 641 }, 642 }; 643 644 static struct clk_rcg2 blsp2_uart1_apps_clk_src = { 645 .cmd_rcgr = 0x09cc, 646 .mnd_width = 16, 647 .hid_width = 5, 648 .parent_map = gcc_xo_gpll0_map, 649 .freq_tbl = ftbl_blsp_uart_apps_clk_src, 650 .clkr.hw.init = &(struct clk_init_data) 651 { 652 .name = "blsp2_uart1_apps_clk_src", 653 .parent_names = gcc_xo_gpll0, 654 .num_parents = 2, 655 .ops = &clk_rcg2_ops, 656 }, 657 }; 658 659 static struct clk_rcg2 blsp2_uart2_apps_clk_src = { 660 .cmd_rcgr = 0x0a4c, 661 .mnd_width = 16, 662 .hid_width = 5, 663 .parent_map = gcc_xo_gpll0_map, 664 .freq_tbl = ftbl_blsp_uart_apps_clk_src, 665 .clkr.hw.init = &(struct clk_init_data) 666 { 667 .name = "blsp2_uart2_apps_clk_src", 668 .parent_names = gcc_xo_gpll0, 669 .num_parents = 2, 670 .ops = &clk_rcg2_ops, 671 }, 672 }; 673 674 static struct clk_rcg2 blsp2_uart3_apps_clk_src = { 675 .cmd_rcgr = 0x0acc, 676 .mnd_width = 16, 677 .hid_width = 5, 678 .parent_map = gcc_xo_gpll0_map, 679 .freq_tbl = ftbl_blsp_uart_apps_clk_src, 680 .clkr.hw.init = &(struct clk_init_data) 681 { 682 .name = "blsp2_uart3_apps_clk_src", 683 .parent_names = gcc_xo_gpll0, 684 .num_parents = 2, 685 .ops = &clk_rcg2_ops, 686 }, 687 }; 688 689 static struct clk_rcg2 blsp2_uart4_apps_clk_src = { 690 .cmd_rcgr = 0x0b4c, 691 .mnd_width = 16, 692 .hid_width = 5, 693 .parent_map = gcc_xo_gpll0_map, 694 .freq_tbl = ftbl_blsp_uart_apps_clk_src, 695 .clkr.hw.init = &(struct clk_init_data) 696 { 697 .name = "blsp2_uart4_apps_clk_src", 698 .parent_names = gcc_xo_gpll0, 699 .num_parents = 2, 700 .ops = &clk_rcg2_ops, 701 }, 702 }; 703 704 static struct clk_rcg2 blsp2_uart5_apps_clk_src = { 705 .cmd_rcgr = 0x0bcc, 706 .mnd_width = 16, 707 .hid_width = 5, 708 .parent_map = gcc_xo_gpll0_map, 709 .freq_tbl = ftbl_blsp_uart_apps_clk_src, 710 .clkr.hw.init = &(struct clk_init_data) 711 { 712 .name = "blsp2_uart5_apps_clk_src", 713 .parent_names = gcc_xo_gpll0, 714 .num_parents = 2, 715 .ops = &clk_rcg2_ops, 716 }, 717 }; 718 719 static struct clk_rcg2 blsp2_uart6_apps_clk_src = { 720 .cmd_rcgr = 0x0c4c, 721 .mnd_width = 16, 722 .hid_width = 5, 723 .parent_map = gcc_xo_gpll0_map, 724 .freq_tbl = ftbl_blsp_uart_apps_clk_src, 725 .clkr.hw.init = &(struct clk_init_data) 726 { 727 .name = "blsp2_uart6_apps_clk_src", 728 .parent_names = gcc_xo_gpll0, 729 .num_parents = 2, 730 .ops = &clk_rcg2_ops, 731 }, 732 }; 733 734 static struct freq_tbl ftbl_gp1_clk_src[] = { 735 F(19200000, P_XO, 1, 0, 0), 736 F(100000000, P_GPLL0, 6, 0, 0), 737 F(200000000, P_GPLL0, 3, 0, 0), 738 { } 739 }; 740 741 static struct clk_rcg2 gp1_clk_src = { 742 .cmd_rcgr = 0x1904, 743 .mnd_width = 8, 744 .hid_width = 5, 745 .parent_map = gcc_xo_gpll0_map, 746 .freq_tbl = ftbl_gp1_clk_src, 747 .clkr.hw.init = &(struct clk_init_data) 748 { 749 .name = "gp1_clk_src", 750 .parent_names = gcc_xo_gpll0, 751 .num_parents = 2, 752 .ops = &clk_rcg2_ops, 753 }, 754 }; 755 756 static struct freq_tbl ftbl_gp2_clk_src[] = { 757 F(19200000, P_XO, 1, 0, 0), 758 F(100000000, P_GPLL0, 6, 0, 0), 759 F(200000000, P_GPLL0, 3, 0, 0), 760 { } 761 }; 762 763 static struct clk_rcg2 gp2_clk_src = { 764 .cmd_rcgr = 0x1944, 765 .mnd_width = 8, 766 .hid_width = 5, 767 .parent_map = gcc_xo_gpll0_map, 768 .freq_tbl = ftbl_gp2_clk_src, 769 .clkr.hw.init = &(struct clk_init_data) 770 { 771 .name = "gp2_clk_src", 772 .parent_names = gcc_xo_gpll0, 773 .num_parents = 2, 774 .ops = &clk_rcg2_ops, 775 }, 776 }; 777 778 static struct freq_tbl ftbl_gp3_clk_src[] = { 779 F(19200000, P_XO, 1, 0, 0), 780 F(100000000, P_GPLL0, 6, 0, 0), 781 F(200000000, P_GPLL0, 3, 0, 0), 782 { } 783 }; 784 785 static struct clk_rcg2 gp3_clk_src = { 786 .cmd_rcgr = 0x1984, 787 .mnd_width = 8, 788 .hid_width = 5, 789 .parent_map = gcc_xo_gpll0_map, 790 .freq_tbl = ftbl_gp3_clk_src, 791 .clkr.hw.init = &(struct clk_init_data) 792 { 793 .name = "gp3_clk_src", 794 .parent_names = gcc_xo_gpll0, 795 .num_parents = 2, 796 .ops = &clk_rcg2_ops, 797 }, 798 }; 799 800 static struct freq_tbl ftbl_pcie_0_aux_clk_src[] = { 801 F(1011000, P_XO, 1, 1, 19), 802 { } 803 }; 804 805 static struct clk_rcg2 pcie_0_aux_clk_src = { 806 .cmd_rcgr = 0x1b00, 807 .mnd_width = 8, 808 .hid_width = 5, 809 .freq_tbl = ftbl_pcie_0_aux_clk_src, 810 .clkr.hw.init = &(struct clk_init_data) 811 { 812 .name = "pcie_0_aux_clk_src", 813 .parent_names = (const char *[]) { "xo" }, 814 .num_parents = 1, 815 .ops = &clk_rcg2_ops, 816 }, 817 }; 818 819 static struct freq_tbl ftbl_pcie_pipe_clk_src[] = { 820 F(125000000, P_XO, 1, 0, 0), 821 { } 822 }; 823 824 static struct clk_rcg2 pcie_0_pipe_clk_src = { 825 .cmd_rcgr = 0x1adc, 826 .hid_width = 5, 827 .freq_tbl = ftbl_pcie_pipe_clk_src, 828 .clkr.hw.init = &(struct clk_init_data) 829 { 830 .name = "pcie_0_pipe_clk_src", 831 .parent_names = (const char *[]) { "xo" }, 832 .num_parents = 1, 833 .ops = &clk_rcg2_ops, 834 }, 835 }; 836 837 static struct freq_tbl ftbl_pcie_1_aux_clk_src[] = { 838 F(1011000, P_XO, 1, 1, 19), 839 { } 840 }; 841 842 static struct clk_rcg2 pcie_1_aux_clk_src = { 843 .cmd_rcgr = 0x1b80, 844 .mnd_width = 8, 845 .hid_width = 5, 846 .freq_tbl = ftbl_pcie_1_aux_clk_src, 847 .clkr.hw.init = &(struct clk_init_data) 848 { 849 .name = "pcie_1_aux_clk_src", 850 .parent_names = (const char *[]) { "xo" }, 851 .num_parents = 1, 852 .ops = &clk_rcg2_ops, 853 }, 854 }; 855 856 static struct clk_rcg2 pcie_1_pipe_clk_src = { 857 .cmd_rcgr = 0x1b5c, 858 .hid_width = 5, 859 .freq_tbl = ftbl_pcie_pipe_clk_src, 860 .clkr.hw.init = &(struct clk_init_data) 861 { 862 .name = "pcie_1_pipe_clk_src", 863 .parent_names = (const char *[]) { "xo" }, 864 .num_parents = 1, 865 .ops = &clk_rcg2_ops, 866 }, 867 }; 868 869 static struct freq_tbl ftbl_pdm2_clk_src[] = { 870 F(60000000, P_GPLL0, 10, 0, 0), 871 { } 872 }; 873 874 static struct clk_rcg2 pdm2_clk_src = { 875 .cmd_rcgr = 0x0cd0, 876 .hid_width = 5, 877 .parent_map = gcc_xo_gpll0_map, 878 .freq_tbl = ftbl_pdm2_clk_src, 879 .clkr.hw.init = &(struct clk_init_data) 880 { 881 .name = "pdm2_clk_src", 882 .parent_names = gcc_xo_gpll0, 883 .num_parents = 2, 884 .ops = &clk_rcg2_ops, 885 }, 886 }; 887 888 static struct freq_tbl ftbl_sdcc1_apps_clk_src[] = { 889 F(144000, P_XO, 16, 3, 25), 890 F(400000, P_XO, 12, 1, 4), 891 F(20000000, P_GPLL0, 15, 1, 2), 892 F(25000000, P_GPLL0, 12, 1, 2), 893 F(50000000, P_GPLL0, 12, 0, 0), 894 F(100000000, P_GPLL0, 6, 0, 0), 895 F(192000000, P_GPLL4, 2, 0, 0), 896 F(384000000, P_GPLL4, 1, 0, 0), 897 { } 898 }; 899 900 static struct clk_rcg2 sdcc1_apps_clk_src = { 901 .cmd_rcgr = 0x04d0, 902 .mnd_width = 8, 903 .hid_width = 5, 904 .parent_map = gcc_xo_gpll0_gpll4_map, 905 .freq_tbl = ftbl_sdcc1_apps_clk_src, 906 .clkr.hw.init = &(struct clk_init_data) 907 { 908 .name = "sdcc1_apps_clk_src", 909 .parent_names = gcc_xo_gpll0_gpll4, 910 .num_parents = 3, 911 .ops = &clk_rcg2_floor_ops, 912 }, 913 }; 914 915 static struct freq_tbl ftbl_sdcc2_4_apps_clk_src[] = { 916 F(144000, P_XO, 16, 3, 25), 917 F(400000, P_XO, 12, 1, 4), 918 F(20000000, P_GPLL0, 15, 1, 2), 919 F(25000000, P_GPLL0, 12, 1, 2), 920 F(50000000, P_GPLL0, 12, 0, 0), 921 F(100000000, P_GPLL0, 6, 0, 0), 922 F(200000000, P_GPLL0, 3, 0, 0), 923 { } 924 }; 925 926 static struct clk_rcg2 sdcc2_apps_clk_src = { 927 .cmd_rcgr = 0x0510, 928 .mnd_width = 8, 929 .hid_width = 5, 930 .parent_map = gcc_xo_gpll0_map, 931 .freq_tbl = ftbl_sdcc2_4_apps_clk_src, 932 .clkr.hw.init = &(struct clk_init_data) 933 { 934 .name = "sdcc2_apps_clk_src", 935 .parent_names = gcc_xo_gpll0, 936 .num_parents = 2, 937 .ops = &clk_rcg2_floor_ops, 938 }, 939 }; 940 941 static struct clk_rcg2 sdcc3_apps_clk_src = { 942 .cmd_rcgr = 0x0550, 943 .mnd_width = 8, 944 .hid_width = 5, 945 .parent_map = gcc_xo_gpll0_map, 946 .freq_tbl = ftbl_sdcc2_4_apps_clk_src, 947 .clkr.hw.init = &(struct clk_init_data) 948 { 949 .name = "sdcc3_apps_clk_src", 950 .parent_names = gcc_xo_gpll0, 951 .num_parents = 2, 952 .ops = &clk_rcg2_floor_ops, 953 }, 954 }; 955 956 static struct clk_rcg2 sdcc4_apps_clk_src = { 957 .cmd_rcgr = 0x0590, 958 .mnd_width = 8, 959 .hid_width = 5, 960 .parent_map = gcc_xo_gpll0_map, 961 .freq_tbl = ftbl_sdcc2_4_apps_clk_src, 962 .clkr.hw.init = &(struct clk_init_data) 963 { 964 .name = "sdcc4_apps_clk_src", 965 .parent_names = gcc_xo_gpll0, 966 .num_parents = 2, 967 .ops = &clk_rcg2_floor_ops, 968 }, 969 }; 970 971 static struct freq_tbl ftbl_tsif_ref_clk_src[] = { 972 F(105500, P_XO, 1, 1, 182), 973 { } 974 }; 975 976 static struct clk_rcg2 tsif_ref_clk_src = { 977 .cmd_rcgr = 0x0d90, 978 .mnd_width = 8, 979 .hid_width = 5, 980 .freq_tbl = ftbl_tsif_ref_clk_src, 981 .clkr.hw.init = &(struct clk_init_data) 982 { 983 .name = "tsif_ref_clk_src", 984 .parent_names = (const char *[]) { "xo" }, 985 .num_parents = 1, 986 .ops = &clk_rcg2_ops, 987 }, 988 }; 989 990 static struct freq_tbl ftbl_usb30_mock_utmi_clk_src[] = { 991 F(19200000, P_XO, 1, 0, 0), 992 F(60000000, P_GPLL0, 10, 0, 0), 993 { } 994 }; 995 996 static struct clk_rcg2 usb30_mock_utmi_clk_src = { 997 .cmd_rcgr = 0x03e8, 998 .hid_width = 5, 999 .parent_map = gcc_xo_gpll0_map, 1000 .freq_tbl = ftbl_usb30_mock_utmi_clk_src, 1001 .clkr.hw.init = &(struct clk_init_data) 1002 { 1003 .name = "usb30_mock_utmi_clk_src", 1004 .parent_names = gcc_xo_gpll0, 1005 .num_parents = 2, 1006 .ops = &clk_rcg2_ops, 1007 }, 1008 }; 1009 1010 static struct freq_tbl ftbl_usb3_phy_aux_clk_src[] = { 1011 F(1200000, P_XO, 16, 0, 0), 1012 { } 1013 }; 1014 1015 static struct clk_rcg2 usb3_phy_aux_clk_src = { 1016 .cmd_rcgr = 0x1414, 1017 .hid_width = 5, 1018 .freq_tbl = ftbl_usb3_phy_aux_clk_src, 1019 .clkr.hw.init = &(struct clk_init_data) 1020 { 1021 .name = "usb3_phy_aux_clk_src", 1022 .parent_names = (const char *[]) { "xo" }, 1023 .num_parents = 1, 1024 .ops = &clk_rcg2_ops, 1025 }, 1026 }; 1027 1028 static struct freq_tbl ftbl_usb_hs_system_clk_src[] = { 1029 F(75000000, P_GPLL0, 8, 0, 0), 1030 { } 1031 }; 1032 1033 static struct clk_rcg2 usb_hs_system_clk_src = { 1034 .cmd_rcgr = 0x0490, 1035 .hid_width = 5, 1036 .parent_map = gcc_xo_gpll0_map, 1037 .freq_tbl = ftbl_usb_hs_system_clk_src, 1038 .clkr.hw.init = &(struct clk_init_data) 1039 { 1040 .name = "usb_hs_system_clk_src", 1041 .parent_names = gcc_xo_gpll0, 1042 .num_parents = 2, 1043 .ops = &clk_rcg2_ops, 1044 }, 1045 }; 1046 1047 static struct clk_branch gcc_blsp1_ahb_clk = { 1048 .halt_reg = 0x05c4, 1049 .halt_check = BRANCH_HALT_VOTED, 1050 .clkr = { 1051 .enable_reg = 0x1484, 1052 .enable_mask = BIT(17), 1053 .hw.init = &(struct clk_init_data) 1054 { 1055 .name = "gcc_blsp1_ahb_clk", 1056 .ops = &clk_branch2_ops, 1057 }, 1058 }, 1059 }; 1060 1061 static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = { 1062 .halt_reg = 0x0648, 1063 .clkr = { 1064 .enable_reg = 0x0648, 1065 .enable_mask = BIT(0), 1066 .hw.init = &(struct clk_init_data) 1067 { 1068 .name = "gcc_blsp1_qup1_i2c_apps_clk", 1069 .parent_names = (const char *[]) { 1070 "blsp1_qup1_i2c_apps_clk_src", 1071 }, 1072 .num_parents = 1, 1073 .flags = CLK_SET_RATE_PARENT, 1074 .ops = &clk_branch2_ops, 1075 }, 1076 }, 1077 }; 1078 1079 static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = { 1080 .halt_reg = 0x0644, 1081 .clkr = { 1082 .enable_reg = 0x0644, 1083 .enable_mask = BIT(0), 1084 .hw.init = &(struct clk_init_data) 1085 { 1086 .name = "gcc_blsp1_qup1_spi_apps_clk", 1087 .parent_names = (const char *[]) { 1088 "blsp1_qup1_spi_apps_clk_src", 1089 }, 1090 .num_parents = 1, 1091 .flags = CLK_SET_RATE_PARENT, 1092 .ops = &clk_branch2_ops, 1093 }, 1094 }, 1095 }; 1096 1097 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = { 1098 .halt_reg = 0x06c8, 1099 .clkr = { 1100 .enable_reg = 0x06c8, 1101 .enable_mask = BIT(0), 1102 .hw.init = &(struct clk_init_data) 1103 { 1104 .name = "gcc_blsp1_qup2_i2c_apps_clk", 1105 .parent_names = (const char *[]) { 1106 "blsp1_qup2_i2c_apps_clk_src", 1107 }, 1108 .num_parents = 1, 1109 .flags = CLK_SET_RATE_PARENT, 1110 .ops = &clk_branch2_ops, 1111 }, 1112 }, 1113 }; 1114 1115 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = { 1116 .halt_reg = 0x06c4, 1117 .clkr = { 1118 .enable_reg = 0x06c4, 1119 .enable_mask = BIT(0), 1120 .hw.init = &(struct clk_init_data) 1121 { 1122 .name = "gcc_blsp1_qup2_spi_apps_clk", 1123 .parent_names = (const char *[]) { 1124 "blsp1_qup2_spi_apps_clk_src", 1125 }, 1126 .num_parents = 1, 1127 .flags = CLK_SET_RATE_PARENT, 1128 .ops = &clk_branch2_ops, 1129 }, 1130 }, 1131 }; 1132 1133 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = { 1134 .halt_reg = 0x0748, 1135 .clkr = { 1136 .enable_reg = 0x0748, 1137 .enable_mask = BIT(0), 1138 .hw.init = &(struct clk_init_data) 1139 { 1140 .name = "gcc_blsp1_qup3_i2c_apps_clk", 1141 .parent_names = (const char *[]) { 1142 "blsp1_qup3_i2c_apps_clk_src", 1143 }, 1144 .num_parents = 1, 1145 .flags = CLK_SET_RATE_PARENT, 1146 .ops = &clk_branch2_ops, 1147 }, 1148 }, 1149 }; 1150 1151 static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = { 1152 .halt_reg = 0x0744, 1153 .clkr = { 1154 .enable_reg = 0x0744, 1155 .enable_mask = BIT(0), 1156 .hw.init = &(struct clk_init_data) 1157 { 1158 .name = "gcc_blsp1_qup3_spi_apps_clk", 1159 .parent_names = (const char *[]) { 1160 "blsp1_qup3_spi_apps_clk_src", 1161 }, 1162 .num_parents = 1, 1163 .flags = CLK_SET_RATE_PARENT, 1164 .ops = &clk_branch2_ops, 1165 }, 1166 }, 1167 }; 1168 1169 static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = { 1170 .halt_reg = 0x07c8, 1171 .clkr = { 1172 .enable_reg = 0x07c8, 1173 .enable_mask = BIT(0), 1174 .hw.init = &(struct clk_init_data) 1175 { 1176 .name = "gcc_blsp1_qup4_i2c_apps_clk", 1177 .parent_names = (const char *[]) { 1178 "blsp1_qup4_i2c_apps_clk_src", 1179 }, 1180 .num_parents = 1, 1181 .flags = CLK_SET_RATE_PARENT, 1182 .ops = &clk_branch2_ops, 1183 }, 1184 }, 1185 }; 1186 1187 static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = { 1188 .halt_reg = 0x07c4, 1189 .clkr = { 1190 .enable_reg = 0x07c4, 1191 .enable_mask = BIT(0), 1192 .hw.init = &(struct clk_init_data) 1193 { 1194 .name = "gcc_blsp1_qup4_spi_apps_clk", 1195 .parent_names = (const char *[]) { 1196 "blsp1_qup4_spi_apps_clk_src", 1197 }, 1198 .num_parents = 1, 1199 .flags = CLK_SET_RATE_PARENT, 1200 .ops = &clk_branch2_ops, 1201 }, 1202 }, 1203 }; 1204 1205 static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = { 1206 .halt_reg = 0x0848, 1207 .clkr = { 1208 .enable_reg = 0x0848, 1209 .enable_mask = BIT(0), 1210 .hw.init = &(struct clk_init_data) 1211 { 1212 .name = "gcc_blsp1_qup5_i2c_apps_clk", 1213 .parent_names = (const char *[]) { 1214 "blsp1_qup5_i2c_apps_clk_src", 1215 }, 1216 .num_parents = 1, 1217 .flags = CLK_SET_RATE_PARENT, 1218 .ops = &clk_branch2_ops, 1219 }, 1220 }, 1221 }; 1222 1223 static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = { 1224 .halt_reg = 0x0844, 1225 .clkr = { 1226 .enable_reg = 0x0844, 1227 .enable_mask = BIT(0), 1228 .hw.init = &(struct clk_init_data) 1229 { 1230 .name = "gcc_blsp1_qup5_spi_apps_clk", 1231 .parent_names = (const char *[]) { 1232 "blsp1_qup5_spi_apps_clk_src", 1233 }, 1234 .num_parents = 1, 1235 .flags = CLK_SET_RATE_PARENT, 1236 .ops = &clk_branch2_ops, 1237 }, 1238 }, 1239 }; 1240 1241 static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = { 1242 .halt_reg = 0x08c8, 1243 .clkr = { 1244 .enable_reg = 0x08c8, 1245 .enable_mask = BIT(0), 1246 .hw.init = &(struct clk_init_data) 1247 { 1248 .name = "gcc_blsp1_qup6_i2c_apps_clk", 1249 .parent_names = (const char *[]) { 1250 "blsp1_qup6_i2c_apps_clk_src", 1251 }, 1252 .num_parents = 1, 1253 .flags = CLK_SET_RATE_PARENT, 1254 .ops = &clk_branch2_ops, 1255 }, 1256 }, 1257 }; 1258 1259 static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = { 1260 .halt_reg = 0x08c4, 1261 .clkr = { 1262 .enable_reg = 0x08c4, 1263 .enable_mask = BIT(0), 1264 .hw.init = &(struct clk_init_data) 1265 { 1266 .name = "gcc_blsp1_qup6_spi_apps_clk", 1267 .parent_names = (const char *[]) { 1268 "blsp1_qup6_spi_apps_clk_src", 1269 }, 1270 .num_parents = 1, 1271 .flags = CLK_SET_RATE_PARENT, 1272 .ops = &clk_branch2_ops, 1273 }, 1274 }, 1275 }; 1276 1277 static struct clk_branch gcc_blsp1_uart1_apps_clk = { 1278 .halt_reg = 0x0684, 1279 .clkr = { 1280 .enable_reg = 0x0684, 1281 .enable_mask = BIT(0), 1282 .hw.init = &(struct clk_init_data) 1283 { 1284 .name = "gcc_blsp1_uart1_apps_clk", 1285 .parent_names = (const char *[]) { 1286 "blsp1_uart1_apps_clk_src", 1287 }, 1288 .num_parents = 1, 1289 .flags = CLK_SET_RATE_PARENT, 1290 .ops = &clk_branch2_ops, 1291 }, 1292 }, 1293 }; 1294 1295 static struct clk_branch gcc_blsp1_uart2_apps_clk = { 1296 .halt_reg = 0x0704, 1297 .clkr = { 1298 .enable_reg = 0x0704, 1299 .enable_mask = BIT(0), 1300 .hw.init = &(struct clk_init_data) 1301 { 1302 .name = "gcc_blsp1_uart2_apps_clk", 1303 .parent_names = (const char *[]) { 1304 "blsp1_uart2_apps_clk_src", 1305 }, 1306 .num_parents = 1, 1307 .flags = CLK_SET_RATE_PARENT, 1308 .ops = &clk_branch2_ops, 1309 }, 1310 }, 1311 }; 1312 1313 static struct clk_branch gcc_blsp1_uart3_apps_clk = { 1314 .halt_reg = 0x0784, 1315 .clkr = { 1316 .enable_reg = 0x0784, 1317 .enable_mask = BIT(0), 1318 .hw.init = &(struct clk_init_data) 1319 { 1320 .name = "gcc_blsp1_uart3_apps_clk", 1321 .parent_names = (const char *[]) { 1322 "blsp1_uart3_apps_clk_src", 1323 }, 1324 .num_parents = 1, 1325 .flags = CLK_SET_RATE_PARENT, 1326 .ops = &clk_branch2_ops, 1327 }, 1328 }, 1329 }; 1330 1331 static struct clk_branch gcc_blsp1_uart4_apps_clk = { 1332 .halt_reg = 0x0804, 1333 .clkr = { 1334 .enable_reg = 0x0804, 1335 .enable_mask = BIT(0), 1336 .hw.init = &(struct clk_init_data) 1337 { 1338 .name = "gcc_blsp1_uart4_apps_clk", 1339 .parent_names = (const char *[]) { 1340 "blsp1_uart4_apps_clk_src", 1341 }, 1342 .num_parents = 1, 1343 .flags = CLK_SET_RATE_PARENT, 1344 .ops = &clk_branch2_ops, 1345 }, 1346 }, 1347 }; 1348 1349 static struct clk_branch gcc_blsp1_uart5_apps_clk = { 1350 .halt_reg = 0x0884, 1351 .clkr = { 1352 .enable_reg = 0x0884, 1353 .enable_mask = BIT(0), 1354 .hw.init = &(struct clk_init_data) 1355 { 1356 .name = "gcc_blsp1_uart5_apps_clk", 1357 .parent_names = (const char *[]) { 1358 "blsp1_uart5_apps_clk_src", 1359 }, 1360 .num_parents = 1, 1361 .flags = CLK_SET_RATE_PARENT, 1362 .ops = &clk_branch2_ops, 1363 }, 1364 }, 1365 }; 1366 1367 static struct clk_branch gcc_blsp1_uart6_apps_clk = { 1368 .halt_reg = 0x0904, 1369 .clkr = { 1370 .enable_reg = 0x0904, 1371 .enable_mask = BIT(0), 1372 .hw.init = &(struct clk_init_data) 1373 { 1374 .name = "gcc_blsp1_uart6_apps_clk", 1375 .parent_names = (const char *[]) { 1376 "blsp1_uart6_apps_clk_src", 1377 }, 1378 .num_parents = 1, 1379 .flags = CLK_SET_RATE_PARENT, 1380 .ops = &clk_branch2_ops, 1381 }, 1382 }, 1383 }; 1384 1385 static struct clk_branch gcc_blsp2_ahb_clk = { 1386 .halt_reg = 0x0944, 1387 .halt_check = BRANCH_HALT_VOTED, 1388 .clkr = { 1389 .enable_reg = 0x1484, 1390 .enable_mask = BIT(15), 1391 .hw.init = &(struct clk_init_data) 1392 { 1393 .name = "gcc_blsp2_ahb_clk", 1394 .ops = &clk_branch2_ops, 1395 }, 1396 }, 1397 }; 1398 1399 static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = { 1400 .halt_reg = 0x0988, 1401 .clkr = { 1402 .enable_reg = 0x0988, 1403 .enable_mask = BIT(0), 1404 .hw.init = &(struct clk_init_data) 1405 { 1406 .name = "gcc_blsp2_qup1_i2c_apps_clk", 1407 .parent_names = (const char *[]) { 1408 "blsp2_qup1_i2c_apps_clk_src", 1409 }, 1410 .num_parents = 1, 1411 .flags = CLK_SET_RATE_PARENT, 1412 .ops = &clk_branch2_ops, 1413 }, 1414 }, 1415 }; 1416 1417 static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = { 1418 .halt_reg = 0x0984, 1419 .clkr = { 1420 .enable_reg = 0x0984, 1421 .enable_mask = BIT(0), 1422 .hw.init = &(struct clk_init_data) 1423 { 1424 .name = "gcc_blsp2_qup1_spi_apps_clk", 1425 .parent_names = (const char *[]) { 1426 "blsp2_qup1_spi_apps_clk_src", 1427 }, 1428 .num_parents = 1, 1429 .flags = CLK_SET_RATE_PARENT, 1430 .ops = &clk_branch2_ops, 1431 }, 1432 }, 1433 }; 1434 1435 static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = { 1436 .halt_reg = 0x0a08, 1437 .clkr = { 1438 .enable_reg = 0x0a08, 1439 .enable_mask = BIT(0), 1440 .hw.init = &(struct clk_init_data) 1441 { 1442 .name = "gcc_blsp2_qup2_i2c_apps_clk", 1443 .parent_names = (const char *[]) { 1444 "blsp2_qup2_i2c_apps_clk_src", 1445 }, 1446 .num_parents = 1, 1447 .flags = CLK_SET_RATE_PARENT, 1448 .ops = &clk_branch2_ops, 1449 }, 1450 }, 1451 }; 1452 1453 static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = { 1454 .halt_reg = 0x0a04, 1455 .clkr = { 1456 .enable_reg = 0x0a04, 1457 .enable_mask = BIT(0), 1458 .hw.init = &(struct clk_init_data) 1459 { 1460 .name = "gcc_blsp2_qup2_spi_apps_clk", 1461 .parent_names = (const char *[]) { 1462 "blsp2_qup2_spi_apps_clk_src", 1463 }, 1464 .num_parents = 1, 1465 .flags = CLK_SET_RATE_PARENT, 1466 .ops = &clk_branch2_ops, 1467 }, 1468 }, 1469 }; 1470 1471 static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = { 1472 .halt_reg = 0x0a88, 1473 .clkr = { 1474 .enable_reg = 0x0a88, 1475 .enable_mask = BIT(0), 1476 .hw.init = &(struct clk_init_data) 1477 { 1478 .name = "gcc_blsp2_qup3_i2c_apps_clk", 1479 .parent_names = (const char *[]) { 1480 "blsp2_qup3_i2c_apps_clk_src", 1481 }, 1482 .num_parents = 1, 1483 .flags = CLK_SET_RATE_PARENT, 1484 .ops = &clk_branch2_ops, 1485 }, 1486 }, 1487 }; 1488 1489 static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = { 1490 .halt_reg = 0x0a84, 1491 .clkr = { 1492 .enable_reg = 0x0a84, 1493 .enable_mask = BIT(0), 1494 .hw.init = &(struct clk_init_data) 1495 { 1496 .name = "gcc_blsp2_qup3_spi_apps_clk", 1497 .parent_names = (const char *[]) { 1498 "blsp2_qup3_spi_apps_clk_src", 1499 }, 1500 .num_parents = 1, 1501 .flags = CLK_SET_RATE_PARENT, 1502 .ops = &clk_branch2_ops, 1503 }, 1504 }, 1505 }; 1506 1507 static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = { 1508 .halt_reg = 0x0b08, 1509 .clkr = { 1510 .enable_reg = 0x0b08, 1511 .enable_mask = BIT(0), 1512 .hw.init = &(struct clk_init_data) 1513 { 1514 .name = "gcc_blsp2_qup4_i2c_apps_clk", 1515 .parent_names = (const char *[]) { 1516 "blsp2_qup4_i2c_apps_clk_src", 1517 }, 1518 .num_parents = 1, 1519 .flags = CLK_SET_RATE_PARENT, 1520 .ops = &clk_branch2_ops, 1521 }, 1522 }, 1523 }; 1524 1525 static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = { 1526 .halt_reg = 0x0b04, 1527 .clkr = { 1528 .enable_reg = 0x0b04, 1529 .enable_mask = BIT(0), 1530 .hw.init = &(struct clk_init_data) 1531 { 1532 .name = "gcc_blsp2_qup4_spi_apps_clk", 1533 .parent_names = (const char *[]) { 1534 "blsp2_qup4_spi_apps_clk_src", 1535 }, 1536 .num_parents = 1, 1537 .flags = CLK_SET_RATE_PARENT, 1538 .ops = &clk_branch2_ops, 1539 }, 1540 }, 1541 }; 1542 1543 static struct clk_branch gcc_blsp2_qup5_i2c_apps_clk = { 1544 .halt_reg = 0x0b88, 1545 .clkr = { 1546 .enable_reg = 0x0b88, 1547 .enable_mask = BIT(0), 1548 .hw.init = &(struct clk_init_data) 1549 { 1550 .name = "gcc_blsp2_qup5_i2c_apps_clk", 1551 .parent_names = (const char *[]) { 1552 "blsp2_qup5_i2c_apps_clk_src", 1553 }, 1554 .num_parents = 1, 1555 .flags = CLK_SET_RATE_PARENT, 1556 .ops = &clk_branch2_ops, 1557 }, 1558 }, 1559 }; 1560 1561 static struct clk_branch gcc_blsp2_qup5_spi_apps_clk = { 1562 .halt_reg = 0x0b84, 1563 .clkr = { 1564 .enable_reg = 0x0b84, 1565 .enable_mask = BIT(0), 1566 .hw.init = &(struct clk_init_data) 1567 { 1568 .name = "gcc_blsp2_qup5_spi_apps_clk", 1569 .parent_names = (const char *[]) { 1570 "blsp2_qup5_spi_apps_clk_src", 1571 }, 1572 .num_parents = 1, 1573 .flags = CLK_SET_RATE_PARENT, 1574 .ops = &clk_branch2_ops, 1575 }, 1576 }, 1577 }; 1578 1579 static struct clk_branch gcc_blsp2_qup6_i2c_apps_clk = { 1580 .halt_reg = 0x0c08, 1581 .clkr = { 1582 .enable_reg = 0x0c08, 1583 .enable_mask = BIT(0), 1584 .hw.init = &(struct clk_init_data) 1585 { 1586 .name = "gcc_blsp2_qup6_i2c_apps_clk", 1587 .parent_names = (const char *[]) { 1588 "blsp2_qup6_i2c_apps_clk_src", 1589 }, 1590 .num_parents = 1, 1591 .flags = CLK_SET_RATE_PARENT, 1592 .ops = &clk_branch2_ops, 1593 }, 1594 }, 1595 }; 1596 1597 static struct clk_branch gcc_blsp2_qup6_spi_apps_clk = { 1598 .halt_reg = 0x0c04, 1599 .clkr = { 1600 .enable_reg = 0x0c04, 1601 .enable_mask = BIT(0), 1602 .hw.init = &(struct clk_init_data) 1603 { 1604 .name = "gcc_blsp2_qup6_spi_apps_clk", 1605 .parent_names = (const char *[]) { 1606 "blsp2_qup6_spi_apps_clk_src", 1607 }, 1608 .num_parents = 1, 1609 .flags = CLK_SET_RATE_PARENT, 1610 .ops = &clk_branch2_ops, 1611 }, 1612 }, 1613 }; 1614 1615 static struct clk_branch gcc_blsp2_uart1_apps_clk = { 1616 .halt_reg = 0x09c4, 1617 .clkr = { 1618 .enable_reg = 0x09c4, 1619 .enable_mask = BIT(0), 1620 .hw.init = &(struct clk_init_data) 1621 { 1622 .name = "gcc_blsp2_uart1_apps_clk", 1623 .parent_names = (const char *[]) { 1624 "blsp2_uart1_apps_clk_src", 1625 }, 1626 .num_parents = 1, 1627 .flags = CLK_SET_RATE_PARENT, 1628 .ops = &clk_branch2_ops, 1629 }, 1630 }, 1631 }; 1632 1633 static struct clk_branch gcc_blsp2_uart2_apps_clk = { 1634 .halt_reg = 0x0a44, 1635 .clkr = { 1636 .enable_reg = 0x0a44, 1637 .enable_mask = BIT(0), 1638 .hw.init = &(struct clk_init_data) 1639 { 1640 .name = "gcc_blsp2_uart2_apps_clk", 1641 .parent_names = (const char *[]) { 1642 "blsp2_uart2_apps_clk_src", 1643 }, 1644 .num_parents = 1, 1645 .flags = CLK_SET_RATE_PARENT, 1646 .ops = &clk_branch2_ops, 1647 }, 1648 }, 1649 }; 1650 1651 static struct clk_branch gcc_blsp2_uart3_apps_clk = { 1652 .halt_reg = 0x0ac4, 1653 .clkr = { 1654 .enable_reg = 0x0ac4, 1655 .enable_mask = BIT(0), 1656 .hw.init = &(struct clk_init_data) 1657 { 1658 .name = "gcc_blsp2_uart3_apps_clk", 1659 .parent_names = (const char *[]) { 1660 "blsp2_uart3_apps_clk_src", 1661 }, 1662 .num_parents = 1, 1663 .flags = CLK_SET_RATE_PARENT, 1664 .ops = &clk_branch2_ops, 1665 }, 1666 }, 1667 }; 1668 1669 static struct clk_branch gcc_blsp2_uart4_apps_clk = { 1670 .halt_reg = 0x0b44, 1671 .clkr = { 1672 .enable_reg = 0x0b44, 1673 .enable_mask = BIT(0), 1674 .hw.init = &(struct clk_init_data) 1675 { 1676 .name = "gcc_blsp2_uart4_apps_clk", 1677 .parent_names = (const char *[]) { 1678 "blsp2_uart4_apps_clk_src", 1679 }, 1680 .num_parents = 1, 1681 .flags = CLK_SET_RATE_PARENT, 1682 .ops = &clk_branch2_ops, 1683 }, 1684 }, 1685 }; 1686 1687 static struct clk_branch gcc_blsp2_uart5_apps_clk = { 1688 .halt_reg = 0x0bc4, 1689 .clkr = { 1690 .enable_reg = 0x0bc4, 1691 .enable_mask = BIT(0), 1692 .hw.init = &(struct clk_init_data) 1693 { 1694 .name = "gcc_blsp2_uart5_apps_clk", 1695 .parent_names = (const char *[]) { 1696 "blsp2_uart5_apps_clk_src", 1697 }, 1698 .num_parents = 1, 1699 .flags = CLK_SET_RATE_PARENT, 1700 .ops = &clk_branch2_ops, 1701 }, 1702 }, 1703 }; 1704 1705 static struct clk_branch gcc_blsp2_uart6_apps_clk = { 1706 .halt_reg = 0x0c44, 1707 .clkr = { 1708 .enable_reg = 0x0c44, 1709 .enable_mask = BIT(0), 1710 .hw.init = &(struct clk_init_data) 1711 { 1712 .name = "gcc_blsp2_uart6_apps_clk", 1713 .parent_names = (const char *[]) { 1714 "blsp2_uart6_apps_clk_src", 1715 }, 1716 .num_parents = 1, 1717 .flags = CLK_SET_RATE_PARENT, 1718 .ops = &clk_branch2_ops, 1719 }, 1720 }, 1721 }; 1722 1723 static struct clk_branch gcc_gp1_clk = { 1724 .halt_reg = 0x1900, 1725 .clkr = { 1726 .enable_reg = 0x1900, 1727 .enable_mask = BIT(0), 1728 .hw.init = &(struct clk_init_data) 1729 { 1730 .name = "gcc_gp1_clk", 1731 .parent_names = (const char *[]) { 1732 "gp1_clk_src", 1733 }, 1734 .num_parents = 1, 1735 .flags = CLK_SET_RATE_PARENT, 1736 .ops = &clk_branch2_ops, 1737 }, 1738 }, 1739 }; 1740 1741 static struct clk_branch gcc_gp2_clk = { 1742 .halt_reg = 0x1940, 1743 .clkr = { 1744 .enable_reg = 0x1940, 1745 .enable_mask = BIT(0), 1746 .hw.init = &(struct clk_init_data) 1747 { 1748 .name = "gcc_gp2_clk", 1749 .parent_names = (const char *[]) { 1750 "gp2_clk_src", 1751 }, 1752 .num_parents = 1, 1753 .flags = CLK_SET_RATE_PARENT, 1754 .ops = &clk_branch2_ops, 1755 }, 1756 }, 1757 }; 1758 1759 static struct clk_branch gcc_gp3_clk = { 1760 .halt_reg = 0x1980, 1761 .clkr = { 1762 .enable_reg = 0x1980, 1763 .enable_mask = BIT(0), 1764 .hw.init = &(struct clk_init_data) 1765 { 1766 .name = "gcc_gp3_clk", 1767 .parent_names = (const char *[]) { 1768 "gp3_clk_src", 1769 }, 1770 .num_parents = 1, 1771 .flags = CLK_SET_RATE_PARENT, 1772 .ops = &clk_branch2_ops, 1773 }, 1774 }, 1775 }; 1776 1777 static struct clk_branch gcc_lpass_q6_axi_clk = { 1778 .halt_reg = 0x0280, 1779 .clkr = { 1780 .enable_reg = 0x0280, 1781 .enable_mask = BIT(0), 1782 .hw.init = &(struct clk_init_data) 1783 { 1784 .name = "gcc_lpass_q6_axi_clk", 1785 .ops = &clk_branch2_ops, 1786 }, 1787 }, 1788 }; 1789 1790 static struct clk_branch gcc_mss_q6_bimc_axi_clk = { 1791 .halt_reg = 0x0284, 1792 .clkr = { 1793 .enable_reg = 0x0284, 1794 .enable_mask = BIT(0), 1795 .hw.init = &(struct clk_init_data) 1796 { 1797 .name = "gcc_mss_q6_bimc_axi_clk", 1798 .ops = &clk_branch2_ops, 1799 }, 1800 }, 1801 }; 1802 1803 static struct clk_branch gcc_pcie_0_aux_clk = { 1804 .halt_reg = 0x1ad4, 1805 .clkr = { 1806 .enable_reg = 0x1ad4, 1807 .enable_mask = BIT(0), 1808 .hw.init = &(struct clk_init_data) 1809 { 1810 .name = "gcc_pcie_0_aux_clk", 1811 .parent_names = (const char *[]) { 1812 "pcie_0_aux_clk_src", 1813 }, 1814 .num_parents = 1, 1815 .flags = CLK_SET_RATE_PARENT, 1816 .ops = &clk_branch2_ops, 1817 }, 1818 }, 1819 }; 1820 1821 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = { 1822 .halt_reg = 0x1ad0, 1823 .clkr = { 1824 .enable_reg = 0x1ad0, 1825 .enable_mask = BIT(0), 1826 .hw.init = &(struct clk_init_data) 1827 { 1828 .name = "gcc_pcie_0_cfg_ahb_clk", 1829 .ops = &clk_branch2_ops, 1830 }, 1831 }, 1832 }; 1833 1834 static struct clk_branch gcc_pcie_0_mstr_axi_clk = { 1835 .halt_reg = 0x1acc, 1836 .clkr = { 1837 .enable_reg = 0x1acc, 1838 .enable_mask = BIT(0), 1839 .hw.init = &(struct clk_init_data) 1840 { 1841 .name = "gcc_pcie_0_mstr_axi_clk", 1842 .ops = &clk_branch2_ops, 1843 }, 1844 }, 1845 }; 1846 1847 static struct clk_branch gcc_pcie_0_pipe_clk = { 1848 .halt_reg = 0x1ad8, 1849 .halt_check = BRANCH_HALT_DELAY, 1850 .clkr = { 1851 .enable_reg = 0x1ad8, 1852 .enable_mask = BIT(0), 1853 .hw.init = &(struct clk_init_data) 1854 { 1855 .name = "gcc_pcie_0_pipe_clk", 1856 .parent_names = (const char *[]) { 1857 "pcie_0_pipe_clk_src", 1858 }, 1859 .num_parents = 1, 1860 .flags = CLK_SET_RATE_PARENT, 1861 .ops = &clk_branch2_ops, 1862 }, 1863 }, 1864 }; 1865 1866 static struct clk_branch gcc_pcie_0_slv_axi_clk = { 1867 .halt_reg = 0x1ac8, 1868 .halt_check = BRANCH_HALT_DELAY, 1869 .clkr = { 1870 .enable_reg = 0x1ac8, 1871 .enable_mask = BIT(0), 1872 .hw.init = &(struct clk_init_data) 1873 { 1874 .name = "gcc_pcie_0_slv_axi_clk", 1875 .ops = &clk_branch2_ops, 1876 }, 1877 }, 1878 }; 1879 1880 static struct clk_branch gcc_pcie_1_aux_clk = { 1881 .halt_reg = 0x1b54, 1882 .clkr = { 1883 .enable_reg = 0x1b54, 1884 .enable_mask = BIT(0), 1885 .hw.init = &(struct clk_init_data) 1886 { 1887 .name = "gcc_pcie_1_aux_clk", 1888 .parent_names = (const char *[]) { 1889 "pcie_1_aux_clk_src", 1890 }, 1891 .num_parents = 1, 1892 .flags = CLK_SET_RATE_PARENT, 1893 .ops = &clk_branch2_ops, 1894 }, 1895 }, 1896 }; 1897 1898 static struct clk_branch gcc_pcie_1_cfg_ahb_clk = { 1899 .halt_reg = 0x1b54, 1900 .clkr = { 1901 .enable_reg = 0x1b54, 1902 .enable_mask = BIT(0), 1903 .hw.init = &(struct clk_init_data) 1904 { 1905 .name = "gcc_pcie_1_cfg_ahb_clk", 1906 .ops = &clk_branch2_ops, 1907 }, 1908 }, 1909 }; 1910 1911 static struct clk_branch gcc_pcie_1_mstr_axi_clk = { 1912 .halt_reg = 0x1b50, 1913 .clkr = { 1914 .enable_reg = 0x1b50, 1915 .enable_mask = BIT(0), 1916 .hw.init = &(struct clk_init_data) 1917 { 1918 .name = "gcc_pcie_1_mstr_axi_clk", 1919 .ops = &clk_branch2_ops, 1920 }, 1921 }, 1922 }; 1923 1924 static struct clk_branch gcc_pcie_1_pipe_clk = { 1925 .halt_reg = 0x1b58, 1926 .halt_check = BRANCH_HALT_DELAY, 1927 .clkr = { 1928 .enable_reg = 0x1b58, 1929 .enable_mask = BIT(0), 1930 .hw.init = &(struct clk_init_data) 1931 { 1932 .name = "gcc_pcie_1_pipe_clk", 1933 .parent_names = (const char *[]) { 1934 "pcie_1_pipe_clk_src", 1935 }, 1936 .num_parents = 1, 1937 .flags = CLK_SET_RATE_PARENT, 1938 .ops = &clk_branch2_ops, 1939 }, 1940 }, 1941 }; 1942 1943 static struct clk_branch gcc_pcie_1_slv_axi_clk = { 1944 .halt_reg = 0x1b48, 1945 .clkr = { 1946 .enable_reg = 0x1b48, 1947 .enable_mask = BIT(0), 1948 .hw.init = &(struct clk_init_data) 1949 { 1950 .name = "gcc_pcie_1_slv_axi_clk", 1951 .ops = &clk_branch2_ops, 1952 }, 1953 }, 1954 }; 1955 1956 static struct clk_branch gcc_pdm2_clk = { 1957 .halt_reg = 0x0ccc, 1958 .clkr = { 1959 .enable_reg = 0x0ccc, 1960 .enable_mask = BIT(0), 1961 .hw.init = &(struct clk_init_data) 1962 { 1963 .name = "gcc_pdm2_clk", 1964 .parent_names = (const char *[]) { 1965 "pdm2_clk_src", 1966 }, 1967 .num_parents = 1, 1968 .flags = CLK_SET_RATE_PARENT, 1969 .ops = &clk_branch2_ops, 1970 }, 1971 }, 1972 }; 1973 1974 static struct clk_branch gcc_pdm_ahb_clk = { 1975 .halt_reg = 0x0cc4, 1976 .clkr = { 1977 .enable_reg = 0x0cc4, 1978 .enable_mask = BIT(0), 1979 .hw.init = &(struct clk_init_data) 1980 { 1981 .name = "gcc_pdm_ahb_clk", 1982 .ops = &clk_branch2_ops, 1983 }, 1984 }, 1985 }; 1986 1987 static struct clk_branch gcc_sdcc1_apps_clk = { 1988 .halt_reg = 0x04c4, 1989 .clkr = { 1990 .enable_reg = 0x04c4, 1991 .enable_mask = BIT(0), 1992 .hw.init = &(struct clk_init_data) 1993 { 1994 .name = "gcc_sdcc1_apps_clk", 1995 .parent_names = (const char *[]) { 1996 "sdcc1_apps_clk_src", 1997 }, 1998 .num_parents = 1, 1999 .flags = CLK_SET_RATE_PARENT, 2000 .ops = &clk_branch2_ops, 2001 }, 2002 }, 2003 }; 2004 2005 static struct clk_branch gcc_sdcc1_ahb_clk = { 2006 .halt_reg = 0x04c8, 2007 .clkr = { 2008 .enable_reg = 0x04c8, 2009 .enable_mask = BIT(0), 2010 .hw.init = &(struct clk_init_data) 2011 { 2012 .name = "gcc_sdcc1_ahb_clk", 2013 .parent_names = (const char *[]){ 2014 "periph_noc_clk_src", 2015 }, 2016 .num_parents = 1, 2017 .ops = &clk_branch2_ops, 2018 }, 2019 }, 2020 }; 2021 2022 static struct clk_branch gcc_sdcc2_ahb_clk = { 2023 .halt_reg = 0x0508, 2024 .clkr = { 2025 .enable_reg = 0x0508, 2026 .enable_mask = BIT(0), 2027 .hw.init = &(struct clk_init_data) 2028 { 2029 .name = "gcc_sdcc2_ahb_clk", 2030 .parent_names = (const char *[]){ 2031 "periph_noc_clk_src", 2032 }, 2033 .num_parents = 1, 2034 .ops = &clk_branch2_ops, 2035 }, 2036 }, 2037 }; 2038 2039 static struct clk_branch gcc_sdcc2_apps_clk = { 2040 .halt_reg = 0x0504, 2041 .clkr = { 2042 .enable_reg = 0x0504, 2043 .enable_mask = BIT(0), 2044 .hw.init = &(struct clk_init_data) 2045 { 2046 .name = "gcc_sdcc2_apps_clk", 2047 .parent_names = (const char *[]) { 2048 "sdcc2_apps_clk_src", 2049 }, 2050 .num_parents = 1, 2051 .flags = CLK_SET_RATE_PARENT, 2052 .ops = &clk_branch2_ops, 2053 }, 2054 }, 2055 }; 2056 2057 static struct clk_branch gcc_sdcc3_ahb_clk = { 2058 .halt_reg = 0x0548, 2059 .clkr = { 2060 .enable_reg = 0x0548, 2061 .enable_mask = BIT(0), 2062 .hw.init = &(struct clk_init_data) 2063 { 2064 .name = "gcc_sdcc3_ahb_clk", 2065 .parent_names = (const char *[]){ 2066 "periph_noc_clk_src", 2067 }, 2068 .num_parents = 1, 2069 .ops = &clk_branch2_ops, 2070 }, 2071 }, 2072 }; 2073 2074 static struct clk_branch gcc_sdcc3_apps_clk = { 2075 .halt_reg = 0x0544, 2076 .clkr = { 2077 .enable_reg = 0x0544, 2078 .enable_mask = BIT(0), 2079 .hw.init = &(struct clk_init_data) 2080 { 2081 .name = "gcc_sdcc3_apps_clk", 2082 .parent_names = (const char *[]) { 2083 "sdcc3_apps_clk_src", 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_sdcc4_ahb_clk = { 2093 .halt_reg = 0x0588, 2094 .clkr = { 2095 .enable_reg = 0x0588, 2096 .enable_mask = BIT(0), 2097 .hw.init = &(struct clk_init_data) 2098 { 2099 .name = "gcc_sdcc4_ahb_clk", 2100 .parent_names = (const char *[]){ 2101 "periph_noc_clk_src", 2102 }, 2103 .num_parents = 1, 2104 .ops = &clk_branch2_ops, 2105 }, 2106 }, 2107 }; 2108 2109 static struct clk_branch gcc_sdcc4_apps_clk = { 2110 .halt_reg = 0x0584, 2111 .clkr = { 2112 .enable_reg = 0x0584, 2113 .enable_mask = BIT(0), 2114 .hw.init = &(struct clk_init_data) 2115 { 2116 .name = "gcc_sdcc4_apps_clk", 2117 .parent_names = (const char *[]) { 2118 "sdcc4_apps_clk_src", 2119 }, 2120 .num_parents = 1, 2121 .flags = CLK_SET_RATE_PARENT, 2122 .ops = &clk_branch2_ops, 2123 }, 2124 }, 2125 }; 2126 2127 static struct clk_branch gcc_sys_noc_ufs_axi_clk = { 2128 .halt_reg = 0x1d7c, 2129 .clkr = { 2130 .enable_reg = 0x1d7c, 2131 .enable_mask = BIT(0), 2132 .hw.init = &(struct clk_init_data) 2133 { 2134 .name = "gcc_sys_noc_ufs_axi_clk", 2135 .parent_names = (const char *[]) { 2136 "ufs_axi_clk_src", 2137 }, 2138 .num_parents = 1, 2139 .flags = CLK_SET_RATE_PARENT, 2140 .ops = &clk_branch2_ops, 2141 }, 2142 }, 2143 }; 2144 2145 static struct clk_branch gcc_sys_noc_usb3_axi_clk = { 2146 .halt_reg = 0x03fc, 2147 .clkr = { 2148 .enable_reg = 0x03fc, 2149 .enable_mask = BIT(0), 2150 .hw.init = &(struct clk_init_data) 2151 { 2152 .name = "gcc_sys_noc_usb3_axi_clk", 2153 .parent_names = (const char *[]) { 2154 "usb30_master_clk_src", 2155 }, 2156 .num_parents = 1, 2157 .flags = CLK_SET_RATE_PARENT, 2158 .ops = &clk_branch2_ops, 2159 }, 2160 }, 2161 }; 2162 2163 static struct clk_branch gcc_tsif_ahb_clk = { 2164 .halt_reg = 0x0d84, 2165 .clkr = { 2166 .enable_reg = 0x0d84, 2167 .enable_mask = BIT(0), 2168 .hw.init = &(struct clk_init_data) 2169 { 2170 .name = "gcc_tsif_ahb_clk", 2171 .ops = &clk_branch2_ops, 2172 }, 2173 }, 2174 }; 2175 2176 static struct clk_branch gcc_tsif_ref_clk = { 2177 .halt_reg = 0x0d88, 2178 .clkr = { 2179 .enable_reg = 0x0d88, 2180 .enable_mask = BIT(0), 2181 .hw.init = &(struct clk_init_data) 2182 { 2183 .name = "gcc_tsif_ref_clk", 2184 .parent_names = (const char *[]) { 2185 "tsif_ref_clk_src", 2186 }, 2187 .num_parents = 1, 2188 .flags = CLK_SET_RATE_PARENT, 2189 .ops = &clk_branch2_ops, 2190 }, 2191 }, 2192 }; 2193 2194 static struct clk_branch gcc_ufs_ahb_clk = { 2195 .halt_reg = 0x1d4c, 2196 .clkr = { 2197 .enable_reg = 0x1d4c, 2198 .enable_mask = BIT(0), 2199 .hw.init = &(struct clk_init_data) 2200 { 2201 .name = "gcc_ufs_ahb_clk", 2202 .ops = &clk_branch2_ops, 2203 }, 2204 }, 2205 }; 2206 2207 static struct clk_branch gcc_ufs_axi_clk = { 2208 .halt_reg = 0x1d48, 2209 .clkr = { 2210 .enable_reg = 0x1d48, 2211 .enable_mask = BIT(0), 2212 .hw.init = &(struct clk_init_data) 2213 { 2214 .name = "gcc_ufs_axi_clk", 2215 .parent_names = (const char *[]) { 2216 "ufs_axi_clk_src", 2217 }, 2218 .num_parents = 1, 2219 .flags = CLK_SET_RATE_PARENT, 2220 .ops = &clk_branch2_ops, 2221 }, 2222 }, 2223 }; 2224 2225 static struct clk_branch gcc_ufs_rx_cfg_clk = { 2226 .halt_reg = 0x1d54, 2227 .clkr = { 2228 .enable_reg = 0x1d54, 2229 .enable_mask = BIT(0), 2230 .hw.init = &(struct clk_init_data) 2231 { 2232 .name = "gcc_ufs_rx_cfg_clk", 2233 .parent_names = (const char *[]) { 2234 "ufs_axi_clk_src", 2235 }, 2236 .num_parents = 1, 2237 .flags = CLK_SET_RATE_PARENT, 2238 .ops = &clk_branch2_ops, 2239 }, 2240 }, 2241 }; 2242 2243 static struct clk_branch gcc_ufs_rx_symbol_0_clk = { 2244 .halt_reg = 0x1d60, 2245 .halt_check = BRANCH_HALT_DELAY, 2246 .clkr = { 2247 .enable_reg = 0x1d60, 2248 .enable_mask = BIT(0), 2249 .hw.init = &(struct clk_init_data) 2250 { 2251 .name = "gcc_ufs_rx_symbol_0_clk", 2252 .ops = &clk_branch2_ops, 2253 }, 2254 }, 2255 }; 2256 2257 static struct clk_branch gcc_ufs_rx_symbol_1_clk = { 2258 .halt_reg = 0x1d64, 2259 .halt_check = BRANCH_HALT_DELAY, 2260 .clkr = { 2261 .enable_reg = 0x1d64, 2262 .enable_mask = BIT(0), 2263 .hw.init = &(struct clk_init_data) 2264 { 2265 .name = "gcc_ufs_rx_symbol_1_clk", 2266 .ops = &clk_branch2_ops, 2267 }, 2268 }, 2269 }; 2270 2271 static struct clk_branch gcc_ufs_tx_cfg_clk = { 2272 .halt_reg = 0x1d50, 2273 .clkr = { 2274 .enable_reg = 0x1d50, 2275 .enable_mask = BIT(0), 2276 .hw.init = &(struct clk_init_data) 2277 { 2278 .name = "gcc_ufs_tx_cfg_clk", 2279 .parent_names = (const char *[]) { 2280 "ufs_axi_clk_src", 2281 }, 2282 .num_parents = 1, 2283 .flags = CLK_SET_RATE_PARENT, 2284 .ops = &clk_branch2_ops, 2285 }, 2286 }, 2287 }; 2288 2289 static struct clk_branch gcc_ufs_tx_symbol_0_clk = { 2290 .halt_reg = 0x1d58, 2291 .halt_check = BRANCH_HALT_DELAY, 2292 .clkr = { 2293 .enable_reg = 0x1d58, 2294 .enable_mask = BIT(0), 2295 .hw.init = &(struct clk_init_data) 2296 { 2297 .name = "gcc_ufs_tx_symbol_0_clk", 2298 .ops = &clk_branch2_ops, 2299 }, 2300 }, 2301 }; 2302 2303 static struct clk_branch gcc_ufs_tx_symbol_1_clk = { 2304 .halt_reg = 0x1d5c, 2305 .halt_check = BRANCH_HALT_DELAY, 2306 .clkr = { 2307 .enable_reg = 0x1d5c, 2308 .enable_mask = BIT(0), 2309 .hw.init = &(struct clk_init_data) 2310 { 2311 .name = "gcc_ufs_tx_symbol_1_clk", 2312 .ops = &clk_branch2_ops, 2313 }, 2314 }, 2315 }; 2316 2317 static struct clk_branch gcc_usb2_hs_phy_sleep_clk = { 2318 .halt_reg = 0x04ac, 2319 .clkr = { 2320 .enable_reg = 0x04ac, 2321 .enable_mask = BIT(0), 2322 .hw.init = &(struct clk_init_data) 2323 { 2324 .name = "gcc_usb2_hs_phy_sleep_clk", 2325 .ops = &clk_branch2_ops, 2326 }, 2327 }, 2328 }; 2329 2330 static struct clk_branch gcc_usb30_master_clk = { 2331 .halt_reg = 0x03c8, 2332 .clkr = { 2333 .enable_reg = 0x03c8, 2334 .enable_mask = BIT(0), 2335 .hw.init = &(struct clk_init_data) 2336 { 2337 .name = "gcc_usb30_master_clk", 2338 .parent_names = (const char *[]) { 2339 "usb30_master_clk_src", 2340 }, 2341 .num_parents = 1, 2342 .flags = CLK_SET_RATE_PARENT, 2343 .ops = &clk_branch2_ops, 2344 }, 2345 }, 2346 }; 2347 2348 static struct clk_branch gcc_usb30_mock_utmi_clk = { 2349 .halt_reg = 0x03d0, 2350 .clkr = { 2351 .enable_reg = 0x03d0, 2352 .enable_mask = BIT(0), 2353 .hw.init = &(struct clk_init_data) 2354 { 2355 .name = "gcc_usb30_mock_utmi_clk", 2356 .parent_names = (const char *[]) { 2357 "usb30_mock_utmi_clk_src", 2358 }, 2359 .num_parents = 1, 2360 .flags = CLK_SET_RATE_PARENT, 2361 .ops = &clk_branch2_ops, 2362 }, 2363 }, 2364 }; 2365 2366 static struct clk_branch gcc_usb30_sleep_clk = { 2367 .halt_reg = 0x03cc, 2368 .clkr = { 2369 .enable_reg = 0x03cc, 2370 .enable_mask = BIT(0), 2371 .hw.init = &(struct clk_init_data) 2372 { 2373 .name = "gcc_usb30_sleep_clk", 2374 .ops = &clk_branch2_ops, 2375 }, 2376 }, 2377 }; 2378 2379 static struct clk_branch gcc_usb3_phy_aux_clk = { 2380 .halt_reg = 0x1408, 2381 .clkr = { 2382 .enable_reg = 0x1408, 2383 .enable_mask = BIT(0), 2384 .hw.init = &(struct clk_init_data) 2385 { 2386 .name = "gcc_usb3_phy_aux_clk", 2387 .parent_names = (const char *[]) { 2388 "usb3_phy_aux_clk_src", 2389 }, 2390 .num_parents = 1, 2391 .flags = CLK_SET_RATE_PARENT, 2392 .ops = &clk_branch2_ops, 2393 }, 2394 }, 2395 }; 2396 2397 static struct clk_branch gcc_usb_hs_ahb_clk = { 2398 .halt_reg = 0x0488, 2399 .clkr = { 2400 .enable_reg = 0x0488, 2401 .enable_mask = BIT(0), 2402 .hw.init = &(struct clk_init_data) 2403 { 2404 .name = "gcc_usb_hs_ahb_clk", 2405 .ops = &clk_branch2_ops, 2406 }, 2407 }, 2408 }; 2409 2410 static struct clk_branch gcc_usb_hs_system_clk = { 2411 .halt_reg = 0x0484, 2412 .clkr = { 2413 .enable_reg = 0x0484, 2414 .enable_mask = BIT(0), 2415 .hw.init = &(struct clk_init_data) 2416 { 2417 .name = "gcc_usb_hs_system_clk", 2418 .parent_names = (const char *[]) { 2419 "usb_hs_system_clk_src", 2420 }, 2421 .num_parents = 1, 2422 .flags = CLK_SET_RATE_PARENT, 2423 .ops = &clk_branch2_ops, 2424 }, 2425 }, 2426 }; 2427 2428 static struct clk_branch gcc_usb_phy_cfg_ahb2phy_clk = { 2429 .halt_reg = 0x1a84, 2430 .clkr = { 2431 .enable_reg = 0x1a84, 2432 .enable_mask = BIT(0), 2433 .hw.init = &(struct clk_init_data) 2434 { 2435 .name = "gcc_usb_phy_cfg_ahb2phy_clk", 2436 .ops = &clk_branch2_ops, 2437 }, 2438 }, 2439 }; 2440 2441 static struct gdsc pcie_gdsc = { 2442 .gdscr = 0x1e18, 2443 .pd = { 2444 .name = "pcie", 2445 }, 2446 .pwrsts = PWRSTS_OFF_ON, 2447 }; 2448 2449 static struct gdsc pcie_0_gdsc = { 2450 .gdscr = 0x1ac4, 2451 .pd = { 2452 .name = "pcie_0", 2453 }, 2454 .pwrsts = PWRSTS_OFF_ON, 2455 }; 2456 2457 static struct gdsc pcie_1_gdsc = { 2458 .gdscr = 0x1b44, 2459 .pd = { 2460 .name = "pcie_1", 2461 }, 2462 .pwrsts = PWRSTS_OFF_ON, 2463 }; 2464 2465 static struct gdsc usb30_gdsc = { 2466 .gdscr = 0x3c4, 2467 .pd = { 2468 .name = "usb30", 2469 }, 2470 .pwrsts = PWRSTS_OFF_ON, 2471 }; 2472 2473 static struct gdsc ufs_gdsc = { 2474 .gdscr = 0x1d44, 2475 .pd = { 2476 .name = "ufs", 2477 }, 2478 .pwrsts = PWRSTS_OFF_ON, 2479 }; 2480 2481 static struct clk_regmap *gcc_msm8994_clocks[] = { 2482 [GPLL0_EARLY] = &gpll0_early.clkr, 2483 [GPLL0] = &gpll0.clkr, 2484 [GPLL4_EARLY] = &gpll4_early.clkr, 2485 [GPLL4] = &gpll4.clkr, 2486 [UFS_AXI_CLK_SRC] = &ufs_axi_clk_src.clkr, 2487 [USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr, 2488 [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr, 2489 [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr, 2490 [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr, 2491 [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr, 2492 [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr, 2493 [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr, 2494 [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr, 2495 [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr, 2496 [BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr, 2497 [BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr, 2498 [BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr, 2499 [BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr, 2500 [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr, 2501 [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr, 2502 [BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr, 2503 [BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr, 2504 [BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr, 2505 [BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr, 2506 [BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr, 2507 [BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr, 2508 [BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr, 2509 [BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr, 2510 [BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr, 2511 [BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr, 2512 [BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr, 2513 [BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr, 2514 [BLSP2_QUP5_I2C_APPS_CLK_SRC] = &blsp2_qup5_i2c_apps_clk_src.clkr, 2515 [BLSP2_QUP5_SPI_APPS_CLK_SRC] = &blsp2_qup5_spi_apps_clk_src.clkr, 2516 [BLSP2_QUP6_I2C_APPS_CLK_SRC] = &blsp2_qup6_i2c_apps_clk_src.clkr, 2517 [BLSP2_QUP6_SPI_APPS_CLK_SRC] = &blsp2_qup6_spi_apps_clk_src.clkr, 2518 [BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr, 2519 [BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr, 2520 [BLSP2_UART3_APPS_CLK_SRC] = &blsp2_uart3_apps_clk_src.clkr, 2521 [BLSP2_UART4_APPS_CLK_SRC] = &blsp2_uart4_apps_clk_src.clkr, 2522 [BLSP2_UART5_APPS_CLK_SRC] = &blsp2_uart5_apps_clk_src.clkr, 2523 [BLSP2_UART6_APPS_CLK_SRC] = &blsp2_uart6_apps_clk_src.clkr, 2524 [GP1_CLK_SRC] = &gp1_clk_src.clkr, 2525 [GP2_CLK_SRC] = &gp2_clk_src.clkr, 2526 [GP3_CLK_SRC] = &gp3_clk_src.clkr, 2527 [PCIE_0_AUX_CLK_SRC] = &pcie_0_aux_clk_src.clkr, 2528 [PCIE_0_PIPE_CLK_SRC] = &pcie_0_pipe_clk_src.clkr, 2529 [PCIE_1_AUX_CLK_SRC] = &pcie_1_aux_clk_src.clkr, 2530 [PCIE_1_PIPE_CLK_SRC] = &pcie_1_pipe_clk_src.clkr, 2531 [PDM2_CLK_SRC] = &pdm2_clk_src.clkr, 2532 [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr, 2533 [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr, 2534 [SDCC3_APPS_CLK_SRC] = &sdcc3_apps_clk_src.clkr, 2535 [SDCC4_APPS_CLK_SRC] = &sdcc4_apps_clk_src.clkr, 2536 [TSIF_REF_CLK_SRC] = &tsif_ref_clk_src.clkr, 2537 [USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr, 2538 [USB3_PHY_AUX_CLK_SRC] = &usb3_phy_aux_clk_src.clkr, 2539 [USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr, 2540 [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr, 2541 [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr, 2542 [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr, 2543 [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr, 2544 [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr, 2545 [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr, 2546 [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr, 2547 [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr, 2548 [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr, 2549 [GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr, 2550 [GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr, 2551 [GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr, 2552 [GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr, 2553 [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr, 2554 [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr, 2555 [GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr, 2556 [GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr, 2557 [GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr, 2558 [GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr, 2559 [GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr, 2560 [GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr, 2561 [GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr, 2562 [GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr, 2563 [GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr, 2564 [GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr, 2565 [GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr, 2566 [GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr, 2567 [GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr, 2568 [GCC_BLSP2_QUP5_I2C_APPS_CLK] = &gcc_blsp2_qup5_i2c_apps_clk.clkr, 2569 [GCC_BLSP2_QUP5_SPI_APPS_CLK] = &gcc_blsp2_qup5_spi_apps_clk.clkr, 2570 [GCC_BLSP2_QUP6_I2C_APPS_CLK] = &gcc_blsp2_qup6_i2c_apps_clk.clkr, 2571 [GCC_BLSP2_QUP6_SPI_APPS_CLK] = &gcc_blsp2_qup6_spi_apps_clk.clkr, 2572 [GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr, 2573 [GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr, 2574 [GCC_BLSP2_UART3_APPS_CLK] = &gcc_blsp2_uart3_apps_clk.clkr, 2575 [GCC_BLSP2_UART4_APPS_CLK] = &gcc_blsp2_uart4_apps_clk.clkr, 2576 [GCC_BLSP2_UART5_APPS_CLK] = &gcc_blsp2_uart5_apps_clk.clkr, 2577 [GCC_BLSP2_UART6_APPS_CLK] = &gcc_blsp2_uart6_apps_clk.clkr, 2578 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr, 2579 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr, 2580 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr, 2581 [GCC_LPASS_Q6_AXI_CLK] = &gcc_lpass_q6_axi_clk.clkr, 2582 [GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr, 2583 [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr, 2584 [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr, 2585 [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr, 2586 [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr, 2587 [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr, 2588 [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr, 2589 [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr, 2590 [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr, 2591 [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr, 2592 [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr, 2593 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr, 2594 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr, 2595 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr, 2596 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr, 2597 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr, 2598 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr, 2599 [GCC_SDCC3_AHB_CLK] = &gcc_sdcc3_ahb_clk.clkr, 2600 [GCC_SDCC3_APPS_CLK] = &gcc_sdcc3_apps_clk.clkr, 2601 [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr, 2602 [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr, 2603 [GCC_SYS_NOC_UFS_AXI_CLK] = &gcc_sys_noc_ufs_axi_clk.clkr, 2604 [GCC_SYS_NOC_USB3_AXI_CLK] = &gcc_sys_noc_usb3_axi_clk.clkr, 2605 [GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr, 2606 [GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr, 2607 [GCC_UFS_AHB_CLK] = &gcc_ufs_ahb_clk.clkr, 2608 [GCC_UFS_AXI_CLK] = &gcc_ufs_axi_clk.clkr, 2609 [GCC_UFS_RX_CFG_CLK] = &gcc_ufs_rx_cfg_clk.clkr, 2610 [GCC_UFS_RX_SYMBOL_0_CLK] = &gcc_ufs_rx_symbol_0_clk.clkr, 2611 [GCC_UFS_RX_SYMBOL_1_CLK] = &gcc_ufs_rx_symbol_1_clk.clkr, 2612 [GCC_UFS_TX_CFG_CLK] = &gcc_ufs_tx_cfg_clk.clkr, 2613 [GCC_UFS_TX_SYMBOL_0_CLK] = &gcc_ufs_tx_symbol_0_clk.clkr, 2614 [GCC_UFS_TX_SYMBOL_1_CLK] = &gcc_ufs_tx_symbol_1_clk.clkr, 2615 [GCC_USB2_HS_PHY_SLEEP_CLK] = &gcc_usb2_hs_phy_sleep_clk.clkr, 2616 [GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr, 2617 [GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr, 2618 [GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr, 2619 [GCC_USB3_PHY_AUX_CLK] = &gcc_usb3_phy_aux_clk.clkr, 2620 [GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr, 2621 [GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr, 2622 [GCC_USB_PHY_CFG_AHB2PHY_CLK] = &gcc_usb_phy_cfg_ahb2phy_clk.clkr, 2623 }; 2624 2625 static struct gdsc *gcc_msm8994_gdscs[] = { 2626 [PCIE_GDSC] = &pcie_gdsc, 2627 [PCIE_0_GDSC] = &pcie_0_gdsc, 2628 [PCIE_1_GDSC] = &pcie_1_gdsc, 2629 [USB30_GDSC] = &usb30_gdsc, 2630 [UFS_GDSC] = &ufs_gdsc, 2631 }; 2632 2633 static const struct qcom_reset_map gcc_msm8994_resets[] = { 2634 [USB3_PHY_RESET] = { 0x1400 }, 2635 [USB3PHY_PHY_RESET] = { 0x1404 }, 2636 [PCIE_PHY_0_RESET] = { 0x1b18 }, 2637 [PCIE_PHY_1_RESET] = { 0x1b98 }, 2638 [QUSB2_PHY_RESET] = { 0x04b8 }, 2639 }; 2640 2641 static const struct regmap_config gcc_msm8994_regmap_config = { 2642 .reg_bits = 32, 2643 .reg_stride = 4, 2644 .val_bits = 32, 2645 .max_register = 0x2000, 2646 .fast_io = true, 2647 }; 2648 2649 static const struct qcom_cc_desc gcc_msm8994_desc = { 2650 .config = &gcc_msm8994_regmap_config, 2651 .clks = gcc_msm8994_clocks, 2652 .num_clks = ARRAY_SIZE(gcc_msm8994_clocks), 2653 .resets = gcc_msm8994_resets, 2654 .num_resets = ARRAY_SIZE(gcc_msm8994_resets), 2655 .gdscs = gcc_msm8994_gdscs, 2656 .num_gdscs = ARRAY_SIZE(gcc_msm8994_gdscs), 2657 }; 2658 2659 static const struct of_device_id gcc_msm8994_match_table[] = { 2660 { .compatible = "qcom,gcc-msm8994" }, 2661 {} 2662 }; 2663 MODULE_DEVICE_TABLE(of, gcc_msm8994_match_table); 2664 2665 static int gcc_msm8994_probe(struct platform_device *pdev) 2666 { 2667 struct device *dev = &pdev->dev; 2668 struct clk *clk; 2669 2670 clk = devm_clk_register(dev, &xo.hw); 2671 if (IS_ERR(clk)) 2672 return PTR_ERR(clk); 2673 2674 return qcom_cc_probe(pdev, &gcc_msm8994_desc); 2675 } 2676 2677 static struct platform_driver gcc_msm8994_driver = { 2678 .probe = gcc_msm8994_probe, 2679 .driver = { 2680 .name = "gcc-msm8994", 2681 .of_match_table = gcc_msm8994_match_table, 2682 }, 2683 }; 2684 2685 static int __init gcc_msm8994_init(void) 2686 { 2687 return platform_driver_register(&gcc_msm8994_driver); 2688 } 2689 core_initcall(gcc_msm8994_init); 2690 2691 static void __exit gcc_msm8994_exit(void) 2692 { 2693 platform_driver_unregister(&gcc_msm8994_driver); 2694 } 2695 module_exit(gcc_msm8994_exit); 2696 2697 MODULE_DESCRIPTION("Qualcomm GCC MSM8994 Driver"); 2698 MODULE_LICENSE("GPL v2"); 2699 MODULE_ALIAS("platform:gcc-msm8994"); 2700