1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Copyright (c) 2015, The Linux Foundation. All rights reserved. 4 */ 5 6 #include <linux/kernel.h> 7 #include <linux/bitops.h> 8 #include <linux/err.h> 9 #include <linux/platform_device.h> 10 #include <linux/module.h> 11 #include <linux/of.h> 12 #include <linux/clk-provider.h> 13 #include <linux/regmap.h> 14 #include <linux/reset-controller.h> 15 16 #include <dt-bindings/clock/qcom,gcc-msm8996.h> 17 18 #include "common.h" 19 #include "clk-regmap.h" 20 #include "clk-alpha-pll.h" 21 #include "clk-rcg.h" 22 #include "clk-branch.h" 23 #include "reset.h" 24 #include "gdsc.h" 25 26 enum { 27 P_XO, 28 P_GPLL0, 29 P_GPLL0_EARLY_DIV, 30 P_SLEEP_CLK, 31 P_GPLL4, 32 P_AUD_REF_CLK, 33 }; 34 35 static struct clk_fixed_factor xo = { 36 .mult = 1, 37 .div = 1, 38 .hw.init = &(struct clk_init_data){ 39 .name = "xo", 40 .parent_data = &(const struct clk_parent_data){ 41 .fw_name = "cxo", .name = "xo_board", 42 }, 43 .num_parents = 1, 44 .ops = &clk_fixed_factor_ops, 45 }, 46 }; 47 48 static struct clk_alpha_pll gpll0_early = { 49 .offset = 0x00000, 50 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 51 .clkr = { 52 .enable_reg = 0x52000, 53 .enable_mask = BIT(0), 54 .hw.init = &(struct clk_init_data){ 55 .name = "gpll0_early", 56 .parent_data = &(const struct clk_parent_data){ 57 .fw_name = "cxo", .name = "xo_board", 58 }, 59 .num_parents = 1, 60 .ops = &clk_alpha_pll_ops, 61 }, 62 }, 63 }; 64 65 static struct clk_fixed_factor gpll0_early_div = { 66 .mult = 1, 67 .div = 2, 68 .hw.init = &(struct clk_init_data){ 69 .name = "gpll0_early_div", 70 .parent_hws = (const struct clk_hw*[]){ 71 &gpll0_early.clkr.hw, 72 }, 73 .num_parents = 1, 74 .ops = &clk_fixed_factor_ops, 75 }, 76 }; 77 78 static struct clk_alpha_pll_postdiv gpll0 = { 79 .offset = 0x00000, 80 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 81 .clkr.hw.init = &(struct clk_init_data){ 82 .name = "gpll0", 83 .parent_hws = (const struct clk_hw*[]){ 84 &gpll0_early.clkr.hw, 85 }, 86 .num_parents = 1, 87 .ops = &clk_alpha_pll_postdiv_ops, 88 }, 89 }; 90 91 static struct clk_branch gcc_mmss_gpll0_div_clk = { 92 .halt_check = BRANCH_HALT_DELAY, 93 .clkr = { 94 .enable_reg = 0x5200c, 95 .enable_mask = BIT(0), 96 .hw.init = &(struct clk_init_data){ 97 .name = "gcc_mmss_gpll0_div_clk", 98 .parent_hws = (const struct clk_hw*[]){ 99 &gpll0.clkr.hw, 100 }, 101 .num_parents = 1, 102 .flags = CLK_SET_RATE_PARENT, 103 .ops = &clk_branch2_ops, 104 }, 105 }, 106 }; 107 108 static struct clk_branch gcc_mss_gpll0_div_clk = { 109 .halt_check = BRANCH_HALT_DELAY, 110 .clkr = { 111 .enable_reg = 0x5200c, 112 .enable_mask = BIT(2), 113 .hw.init = &(struct clk_init_data){ 114 .name = "gcc_mss_gpll0_div_clk", 115 .parent_hws = (const struct clk_hw*[]){ 116 &gpll0.clkr.hw, 117 }, 118 .num_parents = 1, 119 .flags = CLK_SET_RATE_PARENT, 120 .ops = &clk_branch2_ops 121 }, 122 }, 123 }; 124 125 static struct clk_alpha_pll gpll4_early = { 126 .offset = 0x77000, 127 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 128 .clkr = { 129 .enable_reg = 0x52000, 130 .enable_mask = BIT(4), 131 .hw.init = &(struct clk_init_data){ 132 .name = "gpll4_early", 133 .parent_data = &(const struct clk_parent_data){ 134 .fw_name = "cxo", .name = "xo_board", 135 }, 136 .num_parents = 1, 137 .ops = &clk_alpha_pll_ops, 138 }, 139 }, 140 }; 141 142 static struct clk_alpha_pll_postdiv gpll4 = { 143 .offset = 0x77000, 144 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 145 .clkr.hw.init = &(struct clk_init_data){ 146 .name = "gpll4", 147 .parent_hws = (const struct clk_hw*[]){ 148 &gpll4_early.clkr.hw, 149 }, 150 .num_parents = 1, 151 .ops = &clk_alpha_pll_postdiv_ops, 152 }, 153 }; 154 155 static const struct parent_map gcc_sleep_clk_map[] = { 156 { P_SLEEP_CLK, 5 } 157 }; 158 159 static const struct clk_parent_data gcc_sleep_clk[] = { 160 { .fw_name = "sleep_clk", .name = "sleep_clk" } 161 }; 162 163 static const struct parent_map gcc_xo_gpll0_map[] = { 164 { P_XO, 0 }, 165 { P_GPLL0, 1 } 166 }; 167 168 static const struct clk_parent_data gcc_xo_gpll0[] = { 169 { .fw_name = "cxo", .name = "xo_board" }, 170 { .hw = &gpll0.clkr.hw } 171 }; 172 173 static const struct parent_map gcc_xo_sleep_clk_map[] = { 174 { P_XO, 0 }, 175 { P_SLEEP_CLK, 5 } 176 }; 177 178 static const struct clk_parent_data gcc_xo_sleep_clk[] = { 179 { .fw_name = "cxo", .name = "xo_board" }, 180 { .fw_name = "sleep_clk", .name = "sleep_clk" } 181 }; 182 183 static const struct parent_map gcc_xo_gpll0_gpll0_early_div_map[] = { 184 { P_XO, 0 }, 185 { P_GPLL0, 1 }, 186 { P_GPLL0_EARLY_DIV, 6 } 187 }; 188 189 static const struct clk_parent_data gcc_xo_gpll0_gpll0_early_div[] = { 190 { .fw_name = "cxo", .name = "xo_board" }, 191 { .hw = &gpll0.clkr.hw }, 192 { .hw = &gpll0_early_div.hw } 193 }; 194 195 static const struct parent_map gcc_xo_gpll0_gpll4_map[] = { 196 { P_XO, 0 }, 197 { P_GPLL0, 1 }, 198 { P_GPLL4, 5 } 199 }; 200 201 static const struct clk_parent_data gcc_xo_gpll0_gpll4[] = { 202 { .fw_name = "cxo", .name = "xo_board" }, 203 { .hw = &gpll0.clkr.hw }, 204 { .hw = &gpll4.clkr.hw } 205 }; 206 207 static const struct parent_map gcc_xo_gpll0_aud_ref_clk_map[] = { 208 { P_XO, 0 }, 209 { P_GPLL0, 1 }, 210 { P_AUD_REF_CLK, 2 } 211 }; 212 213 static const struct clk_parent_data gcc_xo_gpll0_aud_ref_clk[] = { 214 { .fw_name = "cxo", .name = "xo_board" }, 215 { .hw = &gpll0.clkr.hw }, 216 { .fw_name = "aud_ref_clk", .name = "aud_ref_clk" } 217 }; 218 219 static const struct parent_map gcc_xo_gpll0_sleep_clk_gpll0_early_div_map[] = { 220 { P_XO, 0 }, 221 { P_GPLL0, 1 }, 222 { P_SLEEP_CLK, 5 }, 223 { P_GPLL0_EARLY_DIV, 6 } 224 }; 225 226 static const struct clk_parent_data gcc_xo_gpll0_sleep_clk_gpll0_early_div[] = { 227 { .fw_name = "cxo", .name = "xo_board" }, 228 { .hw = &gpll0.clkr.hw }, 229 { .fw_name = "sleep_clk", .name = "sleep_clk" }, 230 { .hw = &gpll0_early_div.hw } 231 }; 232 233 static const struct parent_map gcc_xo_gpll0_gpll4_gpll0_early_div_map[] = { 234 { P_XO, 0 }, 235 { P_GPLL0, 1 }, 236 { P_GPLL4, 5 }, 237 { P_GPLL0_EARLY_DIV, 6 } 238 }; 239 240 static const struct clk_parent_data gcc_xo_gpll0_gpll4_gpll0_early_div[] = { 241 { .fw_name = "cxo", .name = "xo_board" }, 242 { .hw = &gpll0.clkr.hw }, 243 { .hw = &gpll4.clkr.hw }, 244 { .hw = &gpll0_early_div.hw } 245 }; 246 247 static const struct freq_tbl ftbl_usb30_master_clk_src[] = { 248 F(19200000, P_XO, 1, 0, 0), 249 F(120000000, P_GPLL0, 5, 0, 0), 250 F(150000000, P_GPLL0, 4, 0, 0), 251 { } 252 }; 253 254 static struct clk_rcg2 usb30_master_clk_src = { 255 .cmd_rcgr = 0x0f014, 256 .mnd_width = 8, 257 .hid_width = 5, 258 .parent_map = gcc_xo_gpll0_gpll0_early_div_map, 259 .freq_tbl = ftbl_usb30_master_clk_src, 260 .clkr.hw.init = &(struct clk_init_data){ 261 .name = "usb30_master_clk_src", 262 .parent_data = gcc_xo_gpll0_gpll0_early_div, 263 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_early_div), 264 .ops = &clk_rcg2_ops, 265 }, 266 }; 267 268 static const struct freq_tbl ftbl_usb30_mock_utmi_clk_src[] = { 269 F(19200000, P_XO, 1, 0, 0), 270 { } 271 }; 272 273 static struct clk_rcg2 usb30_mock_utmi_clk_src = { 274 .cmd_rcgr = 0x0f028, 275 .hid_width = 5, 276 .parent_map = gcc_xo_gpll0_gpll0_early_div_map, 277 .freq_tbl = ftbl_usb30_mock_utmi_clk_src, 278 .clkr.hw.init = &(struct clk_init_data){ 279 .name = "usb30_mock_utmi_clk_src", 280 .parent_data = gcc_xo_gpll0_gpll0_early_div, 281 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_early_div), 282 .ops = &clk_rcg2_ops, 283 }, 284 }; 285 286 static const struct freq_tbl ftbl_usb3_phy_aux_clk_src[] = { 287 F(1200000, P_XO, 16, 0, 0), 288 { } 289 }; 290 291 static struct clk_rcg2 usb3_phy_aux_clk_src = { 292 .cmd_rcgr = 0x5000c, 293 .hid_width = 5, 294 .parent_map = gcc_xo_sleep_clk_map, 295 .freq_tbl = ftbl_usb3_phy_aux_clk_src, 296 .clkr.hw.init = &(struct clk_init_data){ 297 .name = "usb3_phy_aux_clk_src", 298 .parent_data = gcc_xo_sleep_clk, 299 .num_parents = ARRAY_SIZE(gcc_xo_sleep_clk), 300 .ops = &clk_rcg2_ops, 301 }, 302 }; 303 304 static const struct freq_tbl ftbl_usb20_master_clk_src[] = { 305 F(120000000, P_GPLL0, 5, 0, 0), 306 { } 307 }; 308 309 static struct clk_rcg2 usb20_master_clk_src = { 310 .cmd_rcgr = 0x12010, 311 .mnd_width = 8, 312 .hid_width = 5, 313 .parent_map = gcc_xo_gpll0_gpll0_early_div_map, 314 .freq_tbl = ftbl_usb20_master_clk_src, 315 .clkr.hw.init = &(struct clk_init_data){ 316 .name = "usb20_master_clk_src", 317 .parent_data = gcc_xo_gpll0_gpll0_early_div, 318 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_early_div), 319 .ops = &clk_rcg2_ops, 320 }, 321 }; 322 323 static struct clk_rcg2 usb20_mock_utmi_clk_src = { 324 .cmd_rcgr = 0x12024, 325 .hid_width = 5, 326 .parent_map = gcc_xo_gpll0_gpll0_early_div_map, 327 .freq_tbl = ftbl_usb30_mock_utmi_clk_src, 328 .clkr.hw.init = &(struct clk_init_data){ 329 .name = "usb20_mock_utmi_clk_src", 330 .parent_data = gcc_xo_gpll0_gpll0_early_div, 331 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_early_div), 332 .ops = &clk_rcg2_ops, 333 }, 334 }; 335 336 static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = { 337 F(144000, P_XO, 16, 3, 25), 338 F(400000, P_XO, 12, 1, 4), 339 F(20000000, P_GPLL0, 15, 1, 2), 340 F(25000000, P_GPLL0, 12, 1, 2), 341 F(50000000, P_GPLL0, 12, 0, 0), 342 F(96000000, P_GPLL4, 4, 0, 0), 343 F(192000000, P_GPLL4, 2, 0, 0), 344 F(384000000, P_GPLL4, 1, 0, 0), 345 { } 346 }; 347 348 static struct clk_rcg2 sdcc1_apps_clk_src = { 349 .cmd_rcgr = 0x13010, 350 .mnd_width = 8, 351 .hid_width = 5, 352 .parent_map = gcc_xo_gpll0_gpll4_gpll0_early_div_map, 353 .freq_tbl = ftbl_sdcc1_apps_clk_src, 354 .clkr.hw.init = &(struct clk_init_data){ 355 .name = "sdcc1_apps_clk_src", 356 .parent_data = gcc_xo_gpll0_gpll4_gpll0_early_div, 357 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4_gpll0_early_div), 358 .ops = &clk_rcg2_floor_ops, 359 }, 360 }; 361 362 static const struct freq_tbl ftbl_sdcc1_ice_core_clk_src[] = { 363 F(19200000, P_XO, 1, 0, 0), 364 F(150000000, P_GPLL0, 4, 0, 0), 365 F(300000000, P_GPLL0, 2, 0, 0), 366 { } 367 }; 368 369 static struct clk_rcg2 sdcc1_ice_core_clk_src = { 370 .cmd_rcgr = 0x13024, 371 .hid_width = 5, 372 .parent_map = gcc_xo_gpll0_gpll4_gpll0_early_div_map, 373 .freq_tbl = ftbl_sdcc1_ice_core_clk_src, 374 .clkr.hw.init = &(struct clk_init_data){ 375 .name = "sdcc1_ice_core_clk_src", 376 .parent_data = gcc_xo_gpll0_gpll4_gpll0_early_div, 377 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4_gpll0_early_div), 378 .ops = &clk_rcg2_ops, 379 }, 380 }; 381 382 static const struct freq_tbl ftbl_sdcc2_apps_clk_src[] = { 383 F(144000, P_XO, 16, 3, 25), 384 F(400000, P_XO, 12, 1, 4), 385 F(20000000, P_GPLL0, 15, 1, 2), 386 F(25000000, P_GPLL0, 12, 1, 2), 387 F(50000000, P_GPLL0, 12, 0, 0), 388 F(100000000, P_GPLL0, 6, 0, 0), 389 F(200000000, P_GPLL0, 3, 0, 0), 390 { } 391 }; 392 393 static struct clk_rcg2 sdcc2_apps_clk_src = { 394 .cmd_rcgr = 0x14010, 395 .mnd_width = 8, 396 .hid_width = 5, 397 .parent_map = gcc_xo_gpll0_gpll4_map, 398 .freq_tbl = ftbl_sdcc2_apps_clk_src, 399 .clkr.hw.init = &(struct clk_init_data){ 400 .name = "sdcc2_apps_clk_src", 401 .parent_data = gcc_xo_gpll0_gpll4, 402 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4), 403 .ops = &clk_rcg2_floor_ops, 404 }, 405 }; 406 407 static struct clk_rcg2 sdcc3_apps_clk_src = { 408 .cmd_rcgr = 0x15010, 409 .mnd_width = 8, 410 .hid_width = 5, 411 .parent_map = gcc_xo_gpll0_gpll4_map, 412 .freq_tbl = ftbl_sdcc2_apps_clk_src, 413 .clkr.hw.init = &(struct clk_init_data){ 414 .name = "sdcc3_apps_clk_src", 415 .parent_data = gcc_xo_gpll0_gpll4, 416 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4), 417 .ops = &clk_rcg2_floor_ops, 418 }, 419 }; 420 421 static const struct freq_tbl ftbl_sdcc4_apps_clk_src[] = { 422 F(144000, P_XO, 16, 3, 25), 423 F(400000, P_XO, 12, 1, 4), 424 F(20000000, P_GPLL0, 15, 1, 2), 425 F(25000000, P_GPLL0, 12, 1, 2), 426 F(50000000, P_GPLL0, 12, 0, 0), 427 F(100000000, P_GPLL0, 6, 0, 0), 428 { } 429 }; 430 431 static struct clk_rcg2 sdcc4_apps_clk_src = { 432 .cmd_rcgr = 0x16010, 433 .mnd_width = 8, 434 .hid_width = 5, 435 .parent_map = gcc_xo_gpll0_map, 436 .freq_tbl = ftbl_sdcc4_apps_clk_src, 437 .clkr.hw.init = &(struct clk_init_data){ 438 .name = "sdcc4_apps_clk_src", 439 .parent_data = gcc_xo_gpll0, 440 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 441 .ops = &clk_rcg2_floor_ops, 442 }, 443 }; 444 445 static const struct freq_tbl ftbl_blsp1_qup1_spi_apps_clk_src[] = { 446 F(960000, P_XO, 10, 1, 2), 447 F(4800000, P_XO, 4, 0, 0), 448 F(9600000, P_XO, 2, 0, 0), 449 F(15000000, P_GPLL0, 10, 1, 4), 450 F(19200000, P_XO, 1, 0, 0), 451 F(25000000, P_GPLL0, 12, 1, 2), 452 F(50000000, P_GPLL0, 12, 0, 0), 453 { } 454 }; 455 456 static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = { 457 .cmd_rcgr = 0x1900c, 458 .mnd_width = 8, 459 .hid_width = 5, 460 .parent_map = gcc_xo_gpll0_map, 461 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 462 .clkr.hw.init = &(struct clk_init_data){ 463 .name = "blsp1_qup1_spi_apps_clk_src", 464 .parent_data = gcc_xo_gpll0, 465 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 466 .ops = &clk_rcg2_ops, 467 }, 468 }; 469 470 static const struct freq_tbl ftbl_blsp1_qup1_i2c_apps_clk_src[] = { 471 F(19200000, P_XO, 1, 0, 0), 472 F(50000000, P_GPLL0, 12, 0, 0), 473 { } 474 }; 475 476 static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = { 477 .cmd_rcgr = 0x19020, 478 .hid_width = 5, 479 .parent_map = gcc_xo_gpll0_map, 480 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 481 .clkr.hw.init = &(struct clk_init_data){ 482 .name = "blsp1_qup1_i2c_apps_clk_src", 483 .parent_data = gcc_xo_gpll0, 484 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 485 .ops = &clk_rcg2_ops, 486 }, 487 }; 488 489 static const struct freq_tbl ftbl_blsp1_uart1_apps_clk_src[] = { 490 F(3686400, P_GPLL0, 1, 96, 15625), 491 F(7372800, P_GPLL0, 1, 192, 15625), 492 F(14745600, P_GPLL0, 1, 384, 15625), 493 F(16000000, P_GPLL0, 5, 2, 15), 494 F(19200000, P_XO, 1, 0, 0), 495 F(24000000, P_GPLL0, 5, 1, 5), 496 F(32000000, P_GPLL0, 1, 4, 75), 497 F(40000000, P_GPLL0, 15, 0, 0), 498 F(46400000, P_GPLL0, 1, 29, 375), 499 F(48000000, P_GPLL0, 12.5, 0, 0), 500 F(51200000, P_GPLL0, 1, 32, 375), 501 F(56000000, P_GPLL0, 1, 7, 75), 502 F(58982400, P_GPLL0, 1, 1536, 15625), 503 F(60000000, P_GPLL0, 10, 0, 0), 504 F(63157895, P_GPLL0, 9.5, 0, 0), 505 { } 506 }; 507 508 static struct clk_rcg2 blsp1_uart1_apps_clk_src = { 509 .cmd_rcgr = 0x1a00c, 510 .mnd_width = 16, 511 .hid_width = 5, 512 .parent_map = gcc_xo_gpll0_map, 513 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 514 .clkr.hw.init = &(struct clk_init_data){ 515 .name = "blsp1_uart1_apps_clk_src", 516 .parent_data = gcc_xo_gpll0, 517 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 518 .ops = &clk_rcg2_ops, 519 }, 520 }; 521 522 static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = { 523 .cmd_rcgr = 0x1b00c, 524 .mnd_width = 8, 525 .hid_width = 5, 526 .parent_map = gcc_xo_gpll0_map, 527 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 528 .clkr.hw.init = &(struct clk_init_data){ 529 .name = "blsp1_qup2_spi_apps_clk_src", 530 .parent_data = gcc_xo_gpll0, 531 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 532 .ops = &clk_rcg2_ops, 533 }, 534 }; 535 536 static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = { 537 .cmd_rcgr = 0x1b020, 538 .hid_width = 5, 539 .parent_map = gcc_xo_gpll0_map, 540 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 541 .clkr.hw.init = &(struct clk_init_data){ 542 .name = "blsp1_qup2_i2c_apps_clk_src", 543 .parent_data = gcc_xo_gpll0, 544 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 545 .ops = &clk_rcg2_ops, 546 }, 547 }; 548 549 static struct clk_rcg2 blsp1_uart2_apps_clk_src = { 550 .cmd_rcgr = 0x1c00c, 551 .mnd_width = 16, 552 .hid_width = 5, 553 .parent_map = gcc_xo_gpll0_map, 554 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 555 .clkr.hw.init = &(struct clk_init_data){ 556 .name = "blsp1_uart2_apps_clk_src", 557 .parent_data = gcc_xo_gpll0, 558 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 559 .ops = &clk_rcg2_ops, 560 }, 561 }; 562 563 static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = { 564 .cmd_rcgr = 0x1d00c, 565 .mnd_width = 8, 566 .hid_width = 5, 567 .parent_map = gcc_xo_gpll0_map, 568 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 569 .clkr.hw.init = &(struct clk_init_data){ 570 .name = "blsp1_qup3_spi_apps_clk_src", 571 .parent_data = gcc_xo_gpll0, 572 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 573 .ops = &clk_rcg2_ops, 574 }, 575 }; 576 577 static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = { 578 .cmd_rcgr = 0x1d020, 579 .hid_width = 5, 580 .parent_map = gcc_xo_gpll0_map, 581 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 582 .clkr.hw.init = &(struct clk_init_data){ 583 .name = "blsp1_qup3_i2c_apps_clk_src", 584 .parent_data = gcc_xo_gpll0, 585 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 586 .ops = &clk_rcg2_ops, 587 }, 588 }; 589 590 static struct clk_rcg2 blsp1_uart3_apps_clk_src = { 591 .cmd_rcgr = 0x1e00c, 592 .mnd_width = 16, 593 .hid_width = 5, 594 .parent_map = gcc_xo_gpll0_map, 595 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 596 .clkr.hw.init = &(struct clk_init_data){ 597 .name = "blsp1_uart3_apps_clk_src", 598 .parent_data = gcc_xo_gpll0, 599 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 600 .ops = &clk_rcg2_ops, 601 }, 602 }; 603 604 static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = { 605 .cmd_rcgr = 0x1f00c, 606 .mnd_width = 8, 607 .hid_width = 5, 608 .parent_map = gcc_xo_gpll0_map, 609 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 610 .clkr.hw.init = &(struct clk_init_data){ 611 .name = "blsp1_qup4_spi_apps_clk_src", 612 .parent_data = gcc_xo_gpll0, 613 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 614 .ops = &clk_rcg2_ops, 615 }, 616 }; 617 618 static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = { 619 .cmd_rcgr = 0x1f020, 620 .hid_width = 5, 621 .parent_map = gcc_xo_gpll0_map, 622 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 623 .clkr.hw.init = &(struct clk_init_data){ 624 .name = "blsp1_qup4_i2c_apps_clk_src", 625 .parent_data = gcc_xo_gpll0, 626 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 627 .ops = &clk_rcg2_ops, 628 }, 629 }; 630 631 static struct clk_rcg2 blsp1_uart4_apps_clk_src = { 632 .cmd_rcgr = 0x2000c, 633 .mnd_width = 16, 634 .hid_width = 5, 635 .parent_map = gcc_xo_gpll0_map, 636 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 637 .clkr.hw.init = &(struct clk_init_data){ 638 .name = "blsp1_uart4_apps_clk_src", 639 .parent_data = gcc_xo_gpll0, 640 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 641 .ops = &clk_rcg2_ops, 642 }, 643 }; 644 645 static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = { 646 .cmd_rcgr = 0x2100c, 647 .mnd_width = 8, 648 .hid_width = 5, 649 .parent_map = gcc_xo_gpll0_map, 650 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 651 .clkr.hw.init = &(struct clk_init_data){ 652 .name = "blsp1_qup5_spi_apps_clk_src", 653 .parent_data = gcc_xo_gpll0, 654 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 655 .ops = &clk_rcg2_ops, 656 }, 657 }; 658 659 static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = { 660 .cmd_rcgr = 0x21020, 661 .hid_width = 5, 662 .parent_map = gcc_xo_gpll0_map, 663 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 664 .clkr.hw.init = &(struct clk_init_data){ 665 .name = "blsp1_qup5_i2c_apps_clk_src", 666 .parent_data = gcc_xo_gpll0, 667 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 668 .ops = &clk_rcg2_ops, 669 }, 670 }; 671 672 static struct clk_rcg2 blsp1_uart5_apps_clk_src = { 673 .cmd_rcgr = 0x2200c, 674 .mnd_width = 16, 675 .hid_width = 5, 676 .parent_map = gcc_xo_gpll0_map, 677 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 678 .clkr.hw.init = &(struct clk_init_data){ 679 .name = "blsp1_uart5_apps_clk_src", 680 .parent_data = gcc_xo_gpll0, 681 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 682 .ops = &clk_rcg2_ops, 683 }, 684 }; 685 686 static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = { 687 .cmd_rcgr = 0x2300c, 688 .mnd_width = 8, 689 .hid_width = 5, 690 .parent_map = gcc_xo_gpll0_map, 691 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 692 .clkr.hw.init = &(struct clk_init_data){ 693 .name = "blsp1_qup6_spi_apps_clk_src", 694 .parent_data = gcc_xo_gpll0, 695 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 696 .ops = &clk_rcg2_ops, 697 }, 698 }; 699 700 static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = { 701 .cmd_rcgr = 0x23020, 702 .hid_width = 5, 703 .parent_map = gcc_xo_gpll0_map, 704 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 705 .clkr.hw.init = &(struct clk_init_data){ 706 .name = "blsp1_qup6_i2c_apps_clk_src", 707 .parent_data = gcc_xo_gpll0, 708 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 709 .ops = &clk_rcg2_ops, 710 }, 711 }; 712 713 static struct clk_rcg2 blsp1_uart6_apps_clk_src = { 714 .cmd_rcgr = 0x2400c, 715 .mnd_width = 16, 716 .hid_width = 5, 717 .parent_map = gcc_xo_gpll0_map, 718 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 719 .clkr.hw.init = &(struct clk_init_data){ 720 .name = "blsp1_uart6_apps_clk_src", 721 .parent_data = gcc_xo_gpll0, 722 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 723 .ops = &clk_rcg2_ops, 724 }, 725 }; 726 727 static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = { 728 .cmd_rcgr = 0x2600c, 729 .mnd_width = 8, 730 .hid_width = 5, 731 .parent_map = gcc_xo_gpll0_map, 732 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 733 .clkr.hw.init = &(struct clk_init_data){ 734 .name = "blsp2_qup1_spi_apps_clk_src", 735 .parent_data = gcc_xo_gpll0, 736 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 737 .ops = &clk_rcg2_ops, 738 }, 739 }; 740 741 static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = { 742 .cmd_rcgr = 0x26020, 743 .hid_width = 5, 744 .parent_map = gcc_xo_gpll0_map, 745 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 746 .clkr.hw.init = &(struct clk_init_data){ 747 .name = "blsp2_qup1_i2c_apps_clk_src", 748 .parent_data = gcc_xo_gpll0, 749 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 750 .ops = &clk_rcg2_ops, 751 }, 752 }; 753 754 static struct clk_rcg2 blsp2_uart1_apps_clk_src = { 755 .cmd_rcgr = 0x2700c, 756 .mnd_width = 16, 757 .hid_width = 5, 758 .parent_map = gcc_xo_gpll0_map, 759 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 760 .clkr.hw.init = &(struct clk_init_data){ 761 .name = "blsp2_uart1_apps_clk_src", 762 .parent_data = gcc_xo_gpll0, 763 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 764 .ops = &clk_rcg2_ops, 765 }, 766 }; 767 768 static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = { 769 .cmd_rcgr = 0x2800c, 770 .mnd_width = 8, 771 .hid_width = 5, 772 .parent_map = gcc_xo_gpll0_map, 773 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 774 .clkr.hw.init = &(struct clk_init_data){ 775 .name = "blsp2_qup2_spi_apps_clk_src", 776 .parent_data = gcc_xo_gpll0, 777 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 778 .ops = &clk_rcg2_ops, 779 }, 780 }; 781 782 static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = { 783 .cmd_rcgr = 0x28020, 784 .hid_width = 5, 785 .parent_map = gcc_xo_gpll0_map, 786 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 787 .clkr.hw.init = &(struct clk_init_data){ 788 .name = "blsp2_qup2_i2c_apps_clk_src", 789 .parent_data = gcc_xo_gpll0, 790 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 791 .ops = &clk_rcg2_ops, 792 }, 793 }; 794 795 static struct clk_rcg2 blsp2_uart2_apps_clk_src = { 796 .cmd_rcgr = 0x2900c, 797 .mnd_width = 16, 798 .hid_width = 5, 799 .parent_map = gcc_xo_gpll0_map, 800 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 801 .clkr.hw.init = &(struct clk_init_data){ 802 .name = "blsp2_uart2_apps_clk_src", 803 .parent_data = gcc_xo_gpll0, 804 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 805 .ops = &clk_rcg2_ops, 806 }, 807 }; 808 809 static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = { 810 .cmd_rcgr = 0x2a00c, 811 .mnd_width = 8, 812 .hid_width = 5, 813 .parent_map = gcc_xo_gpll0_map, 814 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 815 .clkr.hw.init = &(struct clk_init_data){ 816 .name = "blsp2_qup3_spi_apps_clk_src", 817 .parent_data = gcc_xo_gpll0, 818 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 819 .ops = &clk_rcg2_ops, 820 }, 821 }; 822 823 static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = { 824 .cmd_rcgr = 0x2a020, 825 .hid_width = 5, 826 .parent_map = gcc_xo_gpll0_map, 827 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 828 .clkr.hw.init = &(struct clk_init_data){ 829 .name = "blsp2_qup3_i2c_apps_clk_src", 830 .parent_data = gcc_xo_gpll0, 831 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 832 .ops = &clk_rcg2_ops, 833 }, 834 }; 835 836 static struct clk_rcg2 blsp2_uart3_apps_clk_src = { 837 .cmd_rcgr = 0x2b00c, 838 .mnd_width = 16, 839 .hid_width = 5, 840 .parent_map = gcc_xo_gpll0_map, 841 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 842 .clkr.hw.init = &(struct clk_init_data){ 843 .name = "blsp2_uart3_apps_clk_src", 844 .parent_data = gcc_xo_gpll0, 845 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 846 .ops = &clk_rcg2_ops, 847 }, 848 }; 849 850 static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = { 851 .cmd_rcgr = 0x2c00c, 852 .mnd_width = 8, 853 .hid_width = 5, 854 .parent_map = gcc_xo_gpll0_map, 855 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 856 .clkr.hw.init = &(struct clk_init_data){ 857 .name = "blsp2_qup4_spi_apps_clk_src", 858 .parent_data = gcc_xo_gpll0, 859 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 860 .ops = &clk_rcg2_ops, 861 }, 862 }; 863 864 static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = { 865 .cmd_rcgr = 0x2c020, 866 .hid_width = 5, 867 .parent_map = gcc_xo_gpll0_map, 868 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 869 .clkr.hw.init = &(struct clk_init_data){ 870 .name = "blsp2_qup4_i2c_apps_clk_src", 871 .parent_data = gcc_xo_gpll0, 872 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 873 .ops = &clk_rcg2_ops, 874 }, 875 }; 876 877 static struct clk_rcg2 blsp2_uart4_apps_clk_src = { 878 .cmd_rcgr = 0x2d00c, 879 .mnd_width = 16, 880 .hid_width = 5, 881 .parent_map = gcc_xo_gpll0_map, 882 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 883 .clkr.hw.init = &(struct clk_init_data){ 884 .name = "blsp2_uart4_apps_clk_src", 885 .parent_data = gcc_xo_gpll0, 886 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 887 .ops = &clk_rcg2_ops, 888 }, 889 }; 890 891 static struct clk_rcg2 blsp2_qup5_spi_apps_clk_src = { 892 .cmd_rcgr = 0x2e00c, 893 .mnd_width = 8, 894 .hid_width = 5, 895 .parent_map = gcc_xo_gpll0_map, 896 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 897 .clkr.hw.init = &(struct clk_init_data){ 898 .name = "blsp2_qup5_spi_apps_clk_src", 899 .parent_data = gcc_xo_gpll0, 900 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 901 .ops = &clk_rcg2_ops, 902 }, 903 }; 904 905 static struct clk_rcg2 blsp2_qup5_i2c_apps_clk_src = { 906 .cmd_rcgr = 0x2e020, 907 .hid_width = 5, 908 .parent_map = gcc_xo_gpll0_map, 909 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 910 .clkr.hw.init = &(struct clk_init_data){ 911 .name = "blsp2_qup5_i2c_apps_clk_src", 912 .parent_data = gcc_xo_gpll0, 913 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 914 .ops = &clk_rcg2_ops, 915 }, 916 }; 917 918 static struct clk_rcg2 blsp2_uart5_apps_clk_src = { 919 .cmd_rcgr = 0x2f00c, 920 .mnd_width = 16, 921 .hid_width = 5, 922 .parent_map = gcc_xo_gpll0_map, 923 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 924 .clkr.hw.init = &(struct clk_init_data){ 925 .name = "blsp2_uart5_apps_clk_src", 926 .parent_data = gcc_xo_gpll0, 927 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 928 .ops = &clk_rcg2_ops, 929 }, 930 }; 931 932 static struct clk_rcg2 blsp2_qup6_spi_apps_clk_src = { 933 .cmd_rcgr = 0x3000c, 934 .mnd_width = 8, 935 .hid_width = 5, 936 .parent_map = gcc_xo_gpll0_map, 937 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src, 938 .clkr.hw.init = &(struct clk_init_data){ 939 .name = "blsp2_qup6_spi_apps_clk_src", 940 .parent_data = gcc_xo_gpll0, 941 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 942 .ops = &clk_rcg2_ops, 943 }, 944 }; 945 946 static struct clk_rcg2 blsp2_qup6_i2c_apps_clk_src = { 947 .cmd_rcgr = 0x30020, 948 .hid_width = 5, 949 .parent_map = gcc_xo_gpll0_map, 950 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src, 951 .clkr.hw.init = &(struct clk_init_data){ 952 .name = "blsp2_qup6_i2c_apps_clk_src", 953 .parent_data = gcc_xo_gpll0, 954 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 955 .ops = &clk_rcg2_ops, 956 }, 957 }; 958 959 static struct clk_rcg2 blsp2_uart6_apps_clk_src = { 960 .cmd_rcgr = 0x3100c, 961 .mnd_width = 16, 962 .hid_width = 5, 963 .parent_map = gcc_xo_gpll0_map, 964 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src, 965 .clkr.hw.init = &(struct clk_init_data){ 966 .name = "blsp2_uart6_apps_clk_src", 967 .parent_data = gcc_xo_gpll0, 968 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 969 .ops = &clk_rcg2_ops, 970 }, 971 }; 972 973 static const struct freq_tbl ftbl_pdm2_clk_src[] = { 974 F(60000000, P_GPLL0, 10, 0, 0), 975 { } 976 }; 977 978 static struct clk_rcg2 pdm2_clk_src = { 979 .cmd_rcgr = 0x33010, 980 .hid_width = 5, 981 .parent_map = gcc_xo_gpll0_map, 982 .freq_tbl = ftbl_pdm2_clk_src, 983 .clkr.hw.init = &(struct clk_init_data){ 984 .name = "pdm2_clk_src", 985 .parent_data = gcc_xo_gpll0, 986 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 987 .ops = &clk_rcg2_ops, 988 }, 989 }; 990 991 static const struct freq_tbl ftbl_tsif_ref_clk_src[] = { 992 F(105495, P_XO, 1, 1, 182), 993 { } 994 }; 995 996 static struct clk_rcg2 tsif_ref_clk_src = { 997 .cmd_rcgr = 0x36010, 998 .mnd_width = 8, 999 .hid_width = 5, 1000 .parent_map = gcc_xo_gpll0_aud_ref_clk_map, 1001 .freq_tbl = ftbl_tsif_ref_clk_src, 1002 .clkr.hw.init = &(struct clk_init_data){ 1003 .name = "tsif_ref_clk_src", 1004 .parent_data = gcc_xo_gpll0_aud_ref_clk, 1005 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_aud_ref_clk), 1006 .ops = &clk_rcg2_ops, 1007 }, 1008 }; 1009 1010 static struct clk_rcg2 gcc_sleep_clk_src = { 1011 .cmd_rcgr = 0x43014, 1012 .hid_width = 5, 1013 .parent_map = gcc_sleep_clk_map, 1014 .clkr.hw.init = &(struct clk_init_data){ 1015 .name = "gcc_sleep_clk_src", 1016 .parent_data = gcc_sleep_clk, 1017 .num_parents = ARRAY_SIZE(gcc_sleep_clk), 1018 .ops = &clk_rcg2_ops, 1019 }, 1020 }; 1021 1022 static struct clk_rcg2 hmss_rbcpr_clk_src = { 1023 .cmd_rcgr = 0x48040, 1024 .hid_width = 5, 1025 .parent_map = gcc_xo_gpll0_map, 1026 .freq_tbl = ftbl_usb30_mock_utmi_clk_src, 1027 .clkr.hw.init = &(struct clk_init_data){ 1028 .name = "hmss_rbcpr_clk_src", 1029 .parent_data = gcc_xo_gpll0, 1030 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 1031 .ops = &clk_rcg2_ops, 1032 }, 1033 }; 1034 1035 static struct clk_rcg2 hmss_gpll0_clk_src = { 1036 .cmd_rcgr = 0x48058, 1037 .hid_width = 5, 1038 .parent_map = gcc_xo_gpll0_map, 1039 .clkr.hw.init = &(struct clk_init_data){ 1040 .name = "hmss_gpll0_clk_src", 1041 .parent_data = gcc_xo_gpll0, 1042 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 1043 .ops = &clk_rcg2_ops, 1044 }, 1045 }; 1046 1047 static const struct freq_tbl ftbl_gp1_clk_src[] = { 1048 F(19200000, P_XO, 1, 0, 0), 1049 F(100000000, P_GPLL0, 6, 0, 0), 1050 F(200000000, P_GPLL0, 3, 0, 0), 1051 { } 1052 }; 1053 1054 static struct clk_rcg2 gp1_clk_src = { 1055 .cmd_rcgr = 0x64004, 1056 .mnd_width = 8, 1057 .hid_width = 5, 1058 .parent_map = gcc_xo_gpll0_sleep_clk_gpll0_early_div_map, 1059 .freq_tbl = ftbl_gp1_clk_src, 1060 .clkr.hw.init = &(struct clk_init_data){ 1061 .name = "gp1_clk_src", 1062 .parent_data = gcc_xo_gpll0_sleep_clk_gpll0_early_div, 1063 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_sleep_clk_gpll0_early_div), 1064 .ops = &clk_rcg2_ops, 1065 }, 1066 }; 1067 1068 static struct clk_rcg2 gp2_clk_src = { 1069 .cmd_rcgr = 0x65004, 1070 .mnd_width = 8, 1071 .hid_width = 5, 1072 .parent_map = gcc_xo_gpll0_sleep_clk_gpll0_early_div_map, 1073 .freq_tbl = ftbl_gp1_clk_src, 1074 .clkr.hw.init = &(struct clk_init_data){ 1075 .name = "gp2_clk_src", 1076 .parent_data = gcc_xo_gpll0_sleep_clk_gpll0_early_div, 1077 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_sleep_clk_gpll0_early_div), 1078 .ops = &clk_rcg2_ops, 1079 }, 1080 }; 1081 1082 static struct clk_rcg2 gp3_clk_src = { 1083 .cmd_rcgr = 0x66004, 1084 .mnd_width = 8, 1085 .hid_width = 5, 1086 .parent_map = gcc_xo_gpll0_sleep_clk_gpll0_early_div_map, 1087 .freq_tbl = ftbl_gp1_clk_src, 1088 .clkr.hw.init = &(struct clk_init_data){ 1089 .name = "gp3_clk_src", 1090 .parent_data = gcc_xo_gpll0_sleep_clk_gpll0_early_div, 1091 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_sleep_clk_gpll0_early_div), 1092 .ops = &clk_rcg2_ops, 1093 }, 1094 }; 1095 1096 static const struct freq_tbl ftbl_pcie_aux_clk_src[] = { 1097 F(1010526, P_XO, 1, 1, 19), 1098 { } 1099 }; 1100 1101 static struct clk_rcg2 pcie_aux_clk_src = { 1102 .cmd_rcgr = 0x6c000, 1103 .mnd_width = 16, 1104 .hid_width = 5, 1105 .parent_map = gcc_xo_sleep_clk_map, 1106 .freq_tbl = ftbl_pcie_aux_clk_src, 1107 .clkr.hw.init = &(struct clk_init_data){ 1108 .name = "pcie_aux_clk_src", 1109 .parent_data = gcc_xo_sleep_clk, 1110 .num_parents = ARRAY_SIZE(gcc_xo_sleep_clk), 1111 .ops = &clk_rcg2_ops, 1112 }, 1113 }; 1114 1115 static const struct freq_tbl ftbl_ufs_axi_clk_src[] = { 1116 F(100000000, P_GPLL0, 6, 0, 0), 1117 F(200000000, P_GPLL0, 3, 0, 0), 1118 F(240000000, P_GPLL0, 2.5, 0, 0), 1119 { } 1120 }; 1121 1122 static struct clk_rcg2 ufs_axi_clk_src = { 1123 .cmd_rcgr = 0x75024, 1124 .mnd_width = 8, 1125 .hid_width = 5, 1126 .parent_map = gcc_xo_gpll0_map, 1127 .freq_tbl = ftbl_ufs_axi_clk_src, 1128 .clkr.hw.init = &(struct clk_init_data){ 1129 .name = "ufs_axi_clk_src", 1130 .parent_data = gcc_xo_gpll0, 1131 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 1132 .ops = &clk_rcg2_ops, 1133 }, 1134 }; 1135 1136 static const struct freq_tbl ftbl_ufs_ice_core_clk_src[] = { 1137 F(19200000, P_XO, 1, 0, 0), 1138 F(150000000, P_GPLL0, 4, 0, 0), 1139 F(300000000, P_GPLL0, 2, 0, 0), 1140 { } 1141 }; 1142 1143 static struct clk_rcg2 ufs_ice_core_clk_src = { 1144 .cmd_rcgr = 0x76014, 1145 .hid_width = 5, 1146 .parent_map = gcc_xo_gpll0_map, 1147 .freq_tbl = ftbl_ufs_ice_core_clk_src, 1148 .clkr.hw.init = &(struct clk_init_data){ 1149 .name = "ufs_ice_core_clk_src", 1150 .parent_data = gcc_xo_gpll0, 1151 .num_parents = ARRAY_SIZE(gcc_xo_gpll0), 1152 .ops = &clk_rcg2_ops, 1153 }, 1154 }; 1155 1156 static const struct freq_tbl ftbl_qspi_ser_clk_src[] = { 1157 F(75000000, P_GPLL0, 8, 0, 0), 1158 F(150000000, P_GPLL0, 4, 0, 0), 1159 F(256000000, P_GPLL4, 1.5, 0, 0), 1160 F(300000000, P_GPLL0, 2, 0, 0), 1161 { } 1162 }; 1163 1164 static struct clk_rcg2 qspi_ser_clk_src = { 1165 .cmd_rcgr = 0x8b00c, 1166 .hid_width = 5, 1167 .parent_map = gcc_xo_gpll0_gpll4_gpll0_early_div_map, 1168 .freq_tbl = ftbl_qspi_ser_clk_src, 1169 .clkr.hw.init = &(struct clk_init_data){ 1170 .name = "qspi_ser_clk_src", 1171 .parent_data = gcc_xo_gpll0_gpll4_gpll0_early_div, 1172 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4_gpll0_early_div), 1173 .ops = &clk_rcg2_ops, 1174 }, 1175 }; 1176 1177 static struct clk_branch gcc_sys_noc_usb3_axi_clk = { 1178 .halt_reg = 0x0f03c, 1179 .clkr = { 1180 .enable_reg = 0x0f03c, 1181 .enable_mask = BIT(0), 1182 .hw.init = &(struct clk_init_data){ 1183 .name = "gcc_sys_noc_usb3_axi_clk", 1184 .parent_hws = (const struct clk_hw*[]){ 1185 &usb30_master_clk_src.clkr.hw, 1186 }, 1187 .num_parents = 1, 1188 .flags = CLK_SET_RATE_PARENT, 1189 .ops = &clk_branch2_ops, 1190 }, 1191 }, 1192 }; 1193 1194 static struct clk_branch gcc_sys_noc_ufs_axi_clk = { 1195 .halt_reg = 0x75038, 1196 .clkr = { 1197 .enable_reg = 0x75038, 1198 .enable_mask = BIT(0), 1199 .hw.init = &(struct clk_init_data){ 1200 .name = "gcc_sys_noc_ufs_axi_clk", 1201 .parent_hws = (const struct clk_hw*[]){ 1202 &ufs_axi_clk_src.clkr.hw, 1203 }, 1204 .num_parents = 1, 1205 .flags = CLK_SET_RATE_PARENT, 1206 .ops = &clk_branch2_ops, 1207 }, 1208 }, 1209 }; 1210 1211 static struct clk_branch gcc_periph_noc_usb20_ahb_clk = { 1212 .halt_reg = 0x6010, 1213 .clkr = { 1214 .enable_reg = 0x6010, 1215 .enable_mask = BIT(0), 1216 .hw.init = &(struct clk_init_data){ 1217 .name = "gcc_periph_noc_usb20_ahb_clk", 1218 .parent_hws = (const struct clk_hw*[]){ 1219 &usb20_master_clk_src.clkr.hw, 1220 }, 1221 .num_parents = 1, 1222 .flags = CLK_SET_RATE_PARENT, 1223 .ops = &clk_branch2_ops, 1224 }, 1225 }, 1226 }; 1227 1228 static struct clk_branch gcc_mmss_noc_cfg_ahb_clk = { 1229 .halt_reg = 0x9008, 1230 .clkr = { 1231 .enable_reg = 0x9008, 1232 .enable_mask = BIT(0), 1233 .hw.init = &(struct clk_init_data){ 1234 .name = "gcc_mmss_noc_cfg_ahb_clk", 1235 .flags = CLK_IGNORE_UNUSED, 1236 .ops = &clk_branch2_ops, 1237 }, 1238 }, 1239 }; 1240 1241 static struct clk_branch gcc_mmss_bimc_gfx_clk = { 1242 .halt_reg = 0x9010, 1243 .clkr = { 1244 .enable_reg = 0x9010, 1245 .enable_mask = BIT(0), 1246 .hw.init = &(struct clk_init_data){ 1247 .name = "gcc_mmss_bimc_gfx_clk", 1248 .flags = CLK_SET_RATE_PARENT, 1249 .ops = &clk_branch2_ops, 1250 }, 1251 }, 1252 }; 1253 1254 static struct clk_branch gcc_usb30_master_clk = { 1255 .halt_reg = 0x0f008, 1256 .clkr = { 1257 .enable_reg = 0x0f008, 1258 .enable_mask = BIT(0), 1259 .hw.init = &(struct clk_init_data){ 1260 .name = "gcc_usb30_master_clk", 1261 .parent_hws = (const struct clk_hw*[]){ 1262 &usb30_master_clk_src.clkr.hw, 1263 }, 1264 .num_parents = 1, 1265 .flags = CLK_SET_RATE_PARENT, 1266 .ops = &clk_branch2_ops, 1267 }, 1268 }, 1269 }; 1270 1271 static struct clk_branch gcc_usb30_sleep_clk = { 1272 .halt_reg = 0x0f00c, 1273 .clkr = { 1274 .enable_reg = 0x0f00c, 1275 .enable_mask = BIT(0), 1276 .hw.init = &(struct clk_init_data){ 1277 .name = "gcc_usb30_sleep_clk", 1278 .parent_hws = (const struct clk_hw*[]){ 1279 &gcc_sleep_clk_src.clkr.hw, 1280 }, 1281 .num_parents = 1, 1282 .flags = CLK_SET_RATE_PARENT, 1283 .ops = &clk_branch2_ops, 1284 }, 1285 }, 1286 }; 1287 1288 static struct clk_branch gcc_usb30_mock_utmi_clk = { 1289 .halt_reg = 0x0f010, 1290 .clkr = { 1291 .enable_reg = 0x0f010, 1292 .enable_mask = BIT(0), 1293 .hw.init = &(struct clk_init_data){ 1294 .name = "gcc_usb30_mock_utmi_clk", 1295 .parent_hws = (const struct clk_hw*[]){ 1296 &usb30_mock_utmi_clk_src.clkr.hw, 1297 }, 1298 .num_parents = 1, 1299 .flags = CLK_SET_RATE_PARENT, 1300 .ops = &clk_branch2_ops, 1301 }, 1302 }, 1303 }; 1304 1305 static struct clk_branch gcc_usb3_phy_aux_clk = { 1306 .halt_reg = 0x50000, 1307 .clkr = { 1308 .enable_reg = 0x50000, 1309 .enable_mask = BIT(0), 1310 .hw.init = &(struct clk_init_data){ 1311 .name = "gcc_usb3_phy_aux_clk", 1312 .parent_hws = (const struct clk_hw*[]){ 1313 &usb3_phy_aux_clk_src.clkr.hw, 1314 }, 1315 .num_parents = 1, 1316 .flags = CLK_SET_RATE_PARENT, 1317 .ops = &clk_branch2_ops, 1318 }, 1319 }, 1320 }; 1321 1322 static struct clk_branch gcc_usb3_phy_pipe_clk = { 1323 .halt_reg = 0x50004, 1324 .halt_check = BRANCH_HALT_SKIP, 1325 .clkr = { 1326 .enable_reg = 0x50004, 1327 .enable_mask = BIT(0), 1328 .hw.init = &(struct clk_init_data){ 1329 .name = "gcc_usb3_phy_pipe_clk", 1330 .parent_data = &(const struct clk_parent_data){ 1331 .fw_name = "usb3_phy_pipe_clk_src", .name = "usb3_phy_pipe_clk_src", 1332 }, 1333 .num_parents = 1, 1334 .flags = CLK_SET_RATE_PARENT, 1335 .ops = &clk_branch2_ops, 1336 }, 1337 }, 1338 }; 1339 1340 static struct clk_branch gcc_usb20_master_clk = { 1341 .halt_reg = 0x12004, 1342 .clkr = { 1343 .enable_reg = 0x12004, 1344 .enable_mask = BIT(0), 1345 .hw.init = &(struct clk_init_data){ 1346 .name = "gcc_usb20_master_clk", 1347 .parent_hws = (const struct clk_hw*[]){ 1348 &usb20_master_clk_src.clkr.hw, 1349 }, 1350 .num_parents = 1, 1351 .flags = CLK_SET_RATE_PARENT, 1352 .ops = &clk_branch2_ops, 1353 }, 1354 }, 1355 }; 1356 1357 static struct clk_branch gcc_usb20_sleep_clk = { 1358 .halt_reg = 0x12008, 1359 .clkr = { 1360 .enable_reg = 0x12008, 1361 .enable_mask = BIT(0), 1362 .hw.init = &(struct clk_init_data){ 1363 .name = "gcc_usb20_sleep_clk", 1364 .parent_hws = (const struct clk_hw*[]){ 1365 &gcc_sleep_clk_src.clkr.hw, 1366 }, 1367 .num_parents = 1, 1368 .flags = CLK_SET_RATE_PARENT, 1369 .ops = &clk_branch2_ops, 1370 }, 1371 }, 1372 }; 1373 1374 static struct clk_branch gcc_usb20_mock_utmi_clk = { 1375 .halt_reg = 0x1200c, 1376 .clkr = { 1377 .enable_reg = 0x1200c, 1378 .enable_mask = BIT(0), 1379 .hw.init = &(struct clk_init_data){ 1380 .name = "gcc_usb20_mock_utmi_clk", 1381 .parent_hws = (const struct clk_hw*[]){ 1382 &usb20_mock_utmi_clk_src.clkr.hw, 1383 }, 1384 .num_parents = 1, 1385 .flags = CLK_SET_RATE_PARENT, 1386 .ops = &clk_branch2_ops, 1387 }, 1388 }, 1389 }; 1390 1391 static struct clk_branch gcc_usb_phy_cfg_ahb2phy_clk = { 1392 .halt_reg = 0x6a004, 1393 .clkr = { 1394 .enable_reg = 0x6a004, 1395 .enable_mask = BIT(0), 1396 .hw.init = &(struct clk_init_data){ 1397 .name = "gcc_usb_phy_cfg_ahb2phy_clk", 1398 .ops = &clk_branch2_ops, 1399 }, 1400 }, 1401 }; 1402 1403 static struct clk_branch gcc_sdcc1_apps_clk = { 1404 .halt_reg = 0x13004, 1405 .clkr = { 1406 .enable_reg = 0x13004, 1407 .enable_mask = BIT(0), 1408 .hw.init = &(struct clk_init_data){ 1409 .name = "gcc_sdcc1_apps_clk", 1410 .parent_hws = (const struct clk_hw*[]){ 1411 &sdcc1_apps_clk_src.clkr.hw, 1412 }, 1413 .num_parents = 1, 1414 .flags = CLK_SET_RATE_PARENT, 1415 .ops = &clk_branch2_ops, 1416 }, 1417 }, 1418 }; 1419 1420 static struct clk_branch gcc_sdcc1_ahb_clk = { 1421 .halt_reg = 0x13008, 1422 .clkr = { 1423 .enable_reg = 0x13008, 1424 .enable_mask = BIT(0), 1425 .hw.init = &(struct clk_init_data){ 1426 .name = "gcc_sdcc1_ahb_clk", 1427 .ops = &clk_branch2_ops, 1428 }, 1429 }, 1430 }; 1431 1432 static struct clk_branch gcc_sdcc1_ice_core_clk = { 1433 .halt_reg = 0x13038, 1434 .clkr = { 1435 .enable_reg = 0x13038, 1436 .enable_mask = BIT(0), 1437 .hw.init = &(struct clk_init_data){ 1438 .name = "gcc_sdcc1_ice_core_clk", 1439 .parent_hws = (const struct clk_hw*[]){ 1440 &sdcc1_ice_core_clk_src.clkr.hw, 1441 }, 1442 .num_parents = 1, 1443 .flags = CLK_SET_RATE_PARENT, 1444 .ops = &clk_branch2_ops, 1445 }, 1446 }, 1447 }; 1448 1449 static struct clk_branch gcc_sdcc2_apps_clk = { 1450 .halt_reg = 0x14004, 1451 .clkr = { 1452 .enable_reg = 0x14004, 1453 .enable_mask = BIT(0), 1454 .hw.init = &(struct clk_init_data){ 1455 .name = "gcc_sdcc2_apps_clk", 1456 .parent_hws = (const struct clk_hw*[]){ 1457 &sdcc2_apps_clk_src.clkr.hw, 1458 }, 1459 .num_parents = 1, 1460 .flags = CLK_SET_RATE_PARENT, 1461 .ops = &clk_branch2_ops, 1462 }, 1463 }, 1464 }; 1465 1466 static struct clk_branch gcc_sdcc2_ahb_clk = { 1467 .halt_reg = 0x14008, 1468 .clkr = { 1469 .enable_reg = 0x14008, 1470 .enable_mask = BIT(0), 1471 .hw.init = &(struct clk_init_data){ 1472 .name = "gcc_sdcc2_ahb_clk", 1473 .ops = &clk_branch2_ops, 1474 }, 1475 }, 1476 }; 1477 1478 static struct clk_branch gcc_sdcc3_apps_clk = { 1479 .halt_reg = 0x15004, 1480 .clkr = { 1481 .enable_reg = 0x15004, 1482 .enable_mask = BIT(0), 1483 .hw.init = &(struct clk_init_data){ 1484 .name = "gcc_sdcc3_apps_clk", 1485 .parent_hws = (const struct clk_hw*[]){ 1486 &sdcc3_apps_clk_src.clkr.hw, 1487 }, 1488 .num_parents = 1, 1489 .flags = CLK_SET_RATE_PARENT, 1490 .ops = &clk_branch2_ops, 1491 }, 1492 }, 1493 }; 1494 1495 static struct clk_branch gcc_sdcc3_ahb_clk = { 1496 .halt_reg = 0x15008, 1497 .clkr = { 1498 .enable_reg = 0x15008, 1499 .enable_mask = BIT(0), 1500 .hw.init = &(struct clk_init_data){ 1501 .name = "gcc_sdcc3_ahb_clk", 1502 .ops = &clk_branch2_ops, 1503 }, 1504 }, 1505 }; 1506 1507 static struct clk_branch gcc_sdcc4_apps_clk = { 1508 .halt_reg = 0x16004, 1509 .clkr = { 1510 .enable_reg = 0x16004, 1511 .enable_mask = BIT(0), 1512 .hw.init = &(struct clk_init_data){ 1513 .name = "gcc_sdcc4_apps_clk", 1514 .parent_hws = (const struct clk_hw*[]){ 1515 &sdcc4_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_sdcc4_ahb_clk = { 1525 .halt_reg = 0x16008, 1526 .clkr = { 1527 .enable_reg = 0x16008, 1528 .enable_mask = BIT(0), 1529 .hw.init = &(struct clk_init_data){ 1530 .name = "gcc_sdcc4_ahb_clk", 1531 .ops = &clk_branch2_ops, 1532 }, 1533 }, 1534 }; 1535 1536 static struct clk_branch gcc_blsp1_ahb_clk = { 1537 .halt_reg = 0x17004, 1538 .halt_check = BRANCH_HALT_VOTED, 1539 .clkr = { 1540 .enable_reg = 0x52004, 1541 .enable_mask = BIT(17), 1542 .hw.init = &(struct clk_init_data){ 1543 .name = "gcc_blsp1_ahb_clk", 1544 .ops = &clk_branch2_ops, 1545 }, 1546 }, 1547 }; 1548 1549 static struct clk_branch gcc_blsp1_sleep_clk = { 1550 .halt_reg = 0x17008, 1551 .halt_check = BRANCH_HALT_VOTED, 1552 .clkr = { 1553 .enable_reg = 0x52004, 1554 .enable_mask = BIT(16), 1555 .hw.init = &(struct clk_init_data){ 1556 .name = "gcc_blsp1_sleep_clk", 1557 .parent_hws = (const struct clk_hw*[]){ 1558 &gcc_sleep_clk_src.clkr.hw, 1559 }, 1560 .num_parents = 1, 1561 .flags = CLK_SET_RATE_PARENT, 1562 .ops = &clk_branch2_ops, 1563 }, 1564 }, 1565 }; 1566 1567 static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = { 1568 .halt_reg = 0x19004, 1569 .clkr = { 1570 .enable_reg = 0x19004, 1571 .enable_mask = BIT(0), 1572 .hw.init = &(struct clk_init_data){ 1573 .name = "gcc_blsp1_qup1_spi_apps_clk", 1574 .parent_hws = (const struct clk_hw*[]){ 1575 &blsp1_qup1_spi_apps_clk_src.clkr.hw, 1576 }, 1577 .num_parents = 1, 1578 .flags = CLK_SET_RATE_PARENT, 1579 .ops = &clk_branch2_ops, 1580 }, 1581 }, 1582 }; 1583 1584 static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = { 1585 .halt_reg = 0x19008, 1586 .clkr = { 1587 .enable_reg = 0x19008, 1588 .enable_mask = BIT(0), 1589 .hw.init = &(struct clk_init_data){ 1590 .name = "gcc_blsp1_qup1_i2c_apps_clk", 1591 .parent_hws = (const struct clk_hw*[]){ 1592 &blsp1_qup1_i2c_apps_clk_src.clkr.hw, 1593 }, 1594 .num_parents = 1, 1595 .flags = CLK_SET_RATE_PARENT, 1596 .ops = &clk_branch2_ops, 1597 }, 1598 }, 1599 }; 1600 1601 static struct clk_branch gcc_blsp1_uart1_apps_clk = { 1602 .halt_reg = 0x1a004, 1603 .clkr = { 1604 .enable_reg = 0x1a004, 1605 .enable_mask = BIT(0), 1606 .hw.init = &(struct clk_init_data){ 1607 .name = "gcc_blsp1_uart1_apps_clk", 1608 .parent_hws = (const struct clk_hw*[]){ 1609 &blsp1_uart1_apps_clk_src.clkr.hw, 1610 }, 1611 .num_parents = 1, 1612 .flags = CLK_SET_RATE_PARENT, 1613 .ops = &clk_branch2_ops, 1614 }, 1615 }, 1616 }; 1617 1618 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = { 1619 .halt_reg = 0x1b004, 1620 .clkr = { 1621 .enable_reg = 0x1b004, 1622 .enable_mask = BIT(0), 1623 .hw.init = &(struct clk_init_data){ 1624 .name = "gcc_blsp1_qup2_spi_apps_clk", 1625 .parent_hws = (const struct clk_hw*[]){ 1626 &blsp1_qup2_spi_apps_clk_src.clkr.hw, 1627 }, 1628 .num_parents = 1, 1629 .flags = CLK_SET_RATE_PARENT, 1630 .ops = &clk_branch2_ops, 1631 }, 1632 }, 1633 }; 1634 1635 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = { 1636 .halt_reg = 0x1b008, 1637 .clkr = { 1638 .enable_reg = 0x1b008, 1639 .enable_mask = BIT(0), 1640 .hw.init = &(struct clk_init_data){ 1641 .name = "gcc_blsp1_qup2_i2c_apps_clk", 1642 .parent_hws = (const struct clk_hw*[]){ 1643 &blsp1_qup2_i2c_apps_clk_src.clkr.hw, 1644 }, 1645 .num_parents = 1, 1646 .flags = CLK_SET_RATE_PARENT, 1647 .ops = &clk_branch2_ops, 1648 }, 1649 }, 1650 }; 1651 1652 static struct clk_branch gcc_blsp1_uart2_apps_clk = { 1653 .halt_reg = 0x1c004, 1654 .clkr = { 1655 .enable_reg = 0x1c004, 1656 .enable_mask = BIT(0), 1657 .hw.init = &(struct clk_init_data){ 1658 .name = "gcc_blsp1_uart2_apps_clk", 1659 .parent_hws = (const struct clk_hw*[]){ 1660 &blsp1_uart2_apps_clk_src.clkr.hw, 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_blsp1_qup3_spi_apps_clk = { 1670 .halt_reg = 0x1d004, 1671 .clkr = { 1672 .enable_reg = 0x1d004, 1673 .enable_mask = BIT(0), 1674 .hw.init = &(struct clk_init_data){ 1675 .name = "gcc_blsp1_qup3_spi_apps_clk", 1676 .parent_hws = (const struct clk_hw*[]){ 1677 &blsp1_qup3_spi_apps_clk_src.clkr.hw, 1678 }, 1679 .num_parents = 1, 1680 .flags = CLK_SET_RATE_PARENT, 1681 .ops = &clk_branch2_ops, 1682 }, 1683 }, 1684 }; 1685 1686 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = { 1687 .halt_reg = 0x1d008, 1688 .clkr = { 1689 .enable_reg = 0x1d008, 1690 .enable_mask = BIT(0), 1691 .hw.init = &(struct clk_init_data){ 1692 .name = "gcc_blsp1_qup3_i2c_apps_clk", 1693 .parent_hws = (const struct clk_hw*[]){ 1694 &blsp1_qup3_i2c_apps_clk_src.clkr.hw, 1695 }, 1696 .num_parents = 1, 1697 .flags = CLK_SET_RATE_PARENT, 1698 .ops = &clk_branch2_ops, 1699 }, 1700 }, 1701 }; 1702 1703 static struct clk_branch gcc_blsp1_uart3_apps_clk = { 1704 .halt_reg = 0x1e004, 1705 .clkr = { 1706 .enable_reg = 0x1e004, 1707 .enable_mask = BIT(0), 1708 .hw.init = &(struct clk_init_data){ 1709 .name = "gcc_blsp1_uart3_apps_clk", 1710 .parent_hws = (const struct clk_hw*[]){ 1711 &blsp1_uart3_apps_clk_src.clkr.hw, 1712 }, 1713 .num_parents = 1, 1714 .flags = CLK_SET_RATE_PARENT, 1715 .ops = &clk_branch2_ops, 1716 }, 1717 }, 1718 }; 1719 1720 static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = { 1721 .halt_reg = 0x1f004, 1722 .clkr = { 1723 .enable_reg = 0x1f004, 1724 .enable_mask = BIT(0), 1725 .hw.init = &(struct clk_init_data){ 1726 .name = "gcc_blsp1_qup4_spi_apps_clk", 1727 .parent_hws = (const struct clk_hw*[]){ 1728 &blsp1_qup4_spi_apps_clk_src.clkr.hw, 1729 }, 1730 .num_parents = 1, 1731 .flags = CLK_SET_RATE_PARENT, 1732 .ops = &clk_branch2_ops, 1733 }, 1734 }, 1735 }; 1736 1737 static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = { 1738 .halt_reg = 0x1f008, 1739 .clkr = { 1740 .enable_reg = 0x1f008, 1741 .enable_mask = BIT(0), 1742 .hw.init = &(struct clk_init_data){ 1743 .name = "gcc_blsp1_qup4_i2c_apps_clk", 1744 .parent_hws = (const struct clk_hw*[]){ 1745 &blsp1_qup4_i2c_apps_clk_src.clkr.hw, 1746 }, 1747 .num_parents = 1, 1748 .flags = CLK_SET_RATE_PARENT, 1749 .ops = &clk_branch2_ops, 1750 }, 1751 }, 1752 }; 1753 1754 static struct clk_branch gcc_blsp1_uart4_apps_clk = { 1755 .halt_reg = 0x20004, 1756 .clkr = { 1757 .enable_reg = 0x20004, 1758 .enable_mask = BIT(0), 1759 .hw.init = &(struct clk_init_data){ 1760 .name = "gcc_blsp1_uart4_apps_clk", 1761 .parent_hws = (const struct clk_hw*[]){ 1762 &blsp1_uart4_apps_clk_src.clkr.hw, 1763 }, 1764 .num_parents = 1, 1765 .flags = CLK_SET_RATE_PARENT, 1766 .ops = &clk_branch2_ops, 1767 }, 1768 }, 1769 }; 1770 1771 static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = { 1772 .halt_reg = 0x21004, 1773 .clkr = { 1774 .enable_reg = 0x21004, 1775 .enable_mask = BIT(0), 1776 .hw.init = &(struct clk_init_data){ 1777 .name = "gcc_blsp1_qup5_spi_apps_clk", 1778 .parent_hws = (const struct clk_hw*[]){ 1779 &blsp1_qup5_spi_apps_clk_src.clkr.hw, 1780 }, 1781 .num_parents = 1, 1782 .flags = CLK_SET_RATE_PARENT, 1783 .ops = &clk_branch2_ops, 1784 }, 1785 }, 1786 }; 1787 1788 static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = { 1789 .halt_reg = 0x21008, 1790 .clkr = { 1791 .enable_reg = 0x21008, 1792 .enable_mask = BIT(0), 1793 .hw.init = &(struct clk_init_data){ 1794 .name = "gcc_blsp1_qup5_i2c_apps_clk", 1795 .parent_hws = (const struct clk_hw*[]){ 1796 &blsp1_qup5_i2c_apps_clk_src.clkr.hw, 1797 }, 1798 .num_parents = 1, 1799 .flags = CLK_SET_RATE_PARENT, 1800 .ops = &clk_branch2_ops, 1801 }, 1802 }, 1803 }; 1804 1805 static struct clk_branch gcc_blsp1_uart5_apps_clk = { 1806 .halt_reg = 0x22004, 1807 .clkr = { 1808 .enable_reg = 0x22004, 1809 .enable_mask = BIT(0), 1810 .hw.init = &(struct clk_init_data){ 1811 .name = "gcc_blsp1_uart5_apps_clk", 1812 .parent_hws = (const struct clk_hw*[]){ 1813 &blsp1_uart5_apps_clk_src.clkr.hw, 1814 }, 1815 .num_parents = 1, 1816 .flags = CLK_SET_RATE_PARENT, 1817 .ops = &clk_branch2_ops, 1818 }, 1819 }, 1820 }; 1821 1822 static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = { 1823 .halt_reg = 0x23004, 1824 .clkr = { 1825 .enable_reg = 0x23004, 1826 .enable_mask = BIT(0), 1827 .hw.init = &(struct clk_init_data){ 1828 .name = "gcc_blsp1_qup6_spi_apps_clk", 1829 .parent_hws = (const struct clk_hw*[]){ 1830 &blsp1_qup6_spi_apps_clk_src.clkr.hw, 1831 }, 1832 .num_parents = 1, 1833 .flags = CLK_SET_RATE_PARENT, 1834 .ops = &clk_branch2_ops, 1835 }, 1836 }, 1837 }; 1838 1839 static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = { 1840 .halt_reg = 0x23008, 1841 .clkr = { 1842 .enable_reg = 0x23008, 1843 .enable_mask = BIT(0), 1844 .hw.init = &(struct clk_init_data){ 1845 .name = "gcc_blsp1_qup6_i2c_apps_clk", 1846 .parent_hws = (const struct clk_hw*[]){ 1847 &blsp1_qup6_i2c_apps_clk_src.clkr.hw, 1848 }, 1849 .num_parents = 1, 1850 .flags = CLK_SET_RATE_PARENT, 1851 .ops = &clk_branch2_ops, 1852 }, 1853 }, 1854 }; 1855 1856 static struct clk_branch gcc_blsp1_uart6_apps_clk = { 1857 .halt_reg = 0x24004, 1858 .clkr = { 1859 .enable_reg = 0x24004, 1860 .enable_mask = BIT(0), 1861 .hw.init = &(struct clk_init_data){ 1862 .name = "gcc_blsp1_uart6_apps_clk", 1863 .parent_hws = (const struct clk_hw*[]){ 1864 &blsp1_uart6_apps_clk_src.clkr.hw, 1865 }, 1866 .num_parents = 1, 1867 .flags = CLK_SET_RATE_PARENT, 1868 .ops = &clk_branch2_ops, 1869 }, 1870 }, 1871 }; 1872 1873 static struct clk_branch gcc_blsp2_ahb_clk = { 1874 .halt_reg = 0x25004, 1875 .halt_check = BRANCH_HALT_VOTED, 1876 .clkr = { 1877 .enable_reg = 0x52004, 1878 .enable_mask = BIT(15), 1879 .hw.init = &(struct clk_init_data){ 1880 .name = "gcc_blsp2_ahb_clk", 1881 .ops = &clk_branch2_ops, 1882 }, 1883 }, 1884 }; 1885 1886 static struct clk_branch gcc_blsp2_sleep_clk = { 1887 .halt_reg = 0x25008, 1888 .halt_check = BRANCH_HALT_VOTED, 1889 .clkr = { 1890 .enable_reg = 0x52004, 1891 .enable_mask = BIT(14), 1892 .hw.init = &(struct clk_init_data){ 1893 .name = "gcc_blsp2_sleep_clk", 1894 .parent_hws = (const struct clk_hw*[]){ 1895 &gcc_sleep_clk_src.clkr.hw, 1896 }, 1897 .num_parents = 1, 1898 .flags = CLK_SET_RATE_PARENT, 1899 .ops = &clk_branch2_ops, 1900 }, 1901 }, 1902 }; 1903 1904 static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = { 1905 .halt_reg = 0x26004, 1906 .clkr = { 1907 .enable_reg = 0x26004, 1908 .enable_mask = BIT(0), 1909 .hw.init = &(struct clk_init_data){ 1910 .name = "gcc_blsp2_qup1_spi_apps_clk", 1911 .parent_hws = (const struct clk_hw*[]){ 1912 &blsp2_qup1_spi_apps_clk_src.clkr.hw, 1913 }, 1914 .num_parents = 1, 1915 .flags = CLK_SET_RATE_PARENT, 1916 .ops = &clk_branch2_ops, 1917 }, 1918 }, 1919 }; 1920 1921 static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = { 1922 .halt_reg = 0x26008, 1923 .clkr = { 1924 .enable_reg = 0x26008, 1925 .enable_mask = BIT(0), 1926 .hw.init = &(struct clk_init_data){ 1927 .name = "gcc_blsp2_qup1_i2c_apps_clk", 1928 .parent_hws = (const struct clk_hw*[]){ 1929 &blsp2_qup1_i2c_apps_clk_src.clkr.hw, 1930 }, 1931 .num_parents = 1, 1932 .flags = CLK_SET_RATE_PARENT, 1933 .ops = &clk_branch2_ops, 1934 }, 1935 }, 1936 }; 1937 1938 static struct clk_branch gcc_blsp2_uart1_apps_clk = { 1939 .halt_reg = 0x27004, 1940 .clkr = { 1941 .enable_reg = 0x27004, 1942 .enable_mask = BIT(0), 1943 .hw.init = &(struct clk_init_data){ 1944 .name = "gcc_blsp2_uart1_apps_clk", 1945 .parent_hws = (const struct clk_hw*[]){ 1946 &blsp2_uart1_apps_clk_src.clkr.hw, 1947 }, 1948 .num_parents = 1, 1949 .flags = CLK_SET_RATE_PARENT, 1950 .ops = &clk_branch2_ops, 1951 }, 1952 }, 1953 }; 1954 1955 static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = { 1956 .halt_reg = 0x28004, 1957 .clkr = { 1958 .enable_reg = 0x28004, 1959 .enable_mask = BIT(0), 1960 .hw.init = &(struct clk_init_data){ 1961 .name = "gcc_blsp2_qup2_spi_apps_clk", 1962 .parent_hws = (const struct clk_hw*[]){ 1963 &blsp2_qup2_spi_apps_clk_src.clkr.hw, 1964 }, 1965 .num_parents = 1, 1966 .flags = CLK_SET_RATE_PARENT, 1967 .ops = &clk_branch2_ops, 1968 }, 1969 }, 1970 }; 1971 1972 static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = { 1973 .halt_reg = 0x28008, 1974 .clkr = { 1975 .enable_reg = 0x28008, 1976 .enable_mask = BIT(0), 1977 .hw.init = &(struct clk_init_data){ 1978 .name = "gcc_blsp2_qup2_i2c_apps_clk", 1979 .parent_hws = (const struct clk_hw*[]){ 1980 &blsp2_qup2_i2c_apps_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_blsp2_uart2_apps_clk = { 1990 .halt_reg = 0x29004, 1991 .clkr = { 1992 .enable_reg = 0x29004, 1993 .enable_mask = BIT(0), 1994 .hw.init = &(struct clk_init_data){ 1995 .name = "gcc_blsp2_uart2_apps_clk", 1996 .parent_hws = (const struct clk_hw*[]){ 1997 &blsp2_uart2_apps_clk_src.clkr.hw, 1998 }, 1999 .num_parents = 1, 2000 .flags = CLK_SET_RATE_PARENT, 2001 .ops = &clk_branch2_ops, 2002 }, 2003 }, 2004 }; 2005 2006 static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = { 2007 .halt_reg = 0x2a004, 2008 .clkr = { 2009 .enable_reg = 0x2a004, 2010 .enable_mask = BIT(0), 2011 .hw.init = &(struct clk_init_data){ 2012 .name = "gcc_blsp2_qup3_spi_apps_clk", 2013 .parent_hws = (const struct clk_hw*[]){ 2014 &blsp2_qup3_spi_apps_clk_src.clkr.hw, 2015 }, 2016 .num_parents = 1, 2017 .flags = CLK_SET_RATE_PARENT, 2018 .ops = &clk_branch2_ops, 2019 }, 2020 }, 2021 }; 2022 2023 static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = { 2024 .halt_reg = 0x2a008, 2025 .clkr = { 2026 .enable_reg = 0x2a008, 2027 .enable_mask = BIT(0), 2028 .hw.init = &(struct clk_init_data){ 2029 .name = "gcc_blsp2_qup3_i2c_apps_clk", 2030 .parent_hws = (const struct clk_hw*[]){ 2031 &blsp2_qup3_i2c_apps_clk_src.clkr.hw, 2032 }, 2033 .num_parents = 1, 2034 .flags = CLK_SET_RATE_PARENT, 2035 .ops = &clk_branch2_ops, 2036 }, 2037 }, 2038 }; 2039 2040 static struct clk_branch gcc_blsp2_uart3_apps_clk = { 2041 .halt_reg = 0x2b004, 2042 .clkr = { 2043 .enable_reg = 0x2b004, 2044 .enable_mask = BIT(0), 2045 .hw.init = &(struct clk_init_data){ 2046 .name = "gcc_blsp2_uart3_apps_clk", 2047 .parent_hws = (const struct clk_hw*[]){ 2048 &blsp2_uart3_apps_clk_src.clkr.hw, 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_blsp2_qup4_spi_apps_clk = { 2058 .halt_reg = 0x2c004, 2059 .clkr = { 2060 .enable_reg = 0x2c004, 2061 .enable_mask = BIT(0), 2062 .hw.init = &(struct clk_init_data){ 2063 .name = "gcc_blsp2_qup4_spi_apps_clk", 2064 .parent_hws = (const struct clk_hw*[]){ 2065 &blsp2_qup4_spi_apps_clk_src.clkr.hw, 2066 }, 2067 .num_parents = 1, 2068 .flags = CLK_SET_RATE_PARENT, 2069 .ops = &clk_branch2_ops, 2070 }, 2071 }, 2072 }; 2073 2074 static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = { 2075 .halt_reg = 0x2c008, 2076 .clkr = { 2077 .enable_reg = 0x2c008, 2078 .enable_mask = BIT(0), 2079 .hw.init = &(struct clk_init_data){ 2080 .name = "gcc_blsp2_qup4_i2c_apps_clk", 2081 .parent_hws = (const struct clk_hw*[]){ 2082 &blsp2_qup4_i2c_apps_clk_src.clkr.hw, 2083 }, 2084 .num_parents = 1, 2085 .flags = CLK_SET_RATE_PARENT, 2086 .ops = &clk_branch2_ops, 2087 }, 2088 }, 2089 }; 2090 2091 static struct clk_branch gcc_blsp2_uart4_apps_clk = { 2092 .halt_reg = 0x2d004, 2093 .clkr = { 2094 .enable_reg = 0x2d004, 2095 .enable_mask = BIT(0), 2096 .hw.init = &(struct clk_init_data){ 2097 .name = "gcc_blsp2_uart4_apps_clk", 2098 .parent_hws = (const struct clk_hw*[]){ 2099 &blsp2_uart4_apps_clk_src.clkr.hw, 2100 }, 2101 .num_parents = 1, 2102 .flags = CLK_SET_RATE_PARENT, 2103 .ops = &clk_branch2_ops, 2104 }, 2105 }, 2106 }; 2107 2108 static struct clk_branch gcc_blsp2_qup5_spi_apps_clk = { 2109 .halt_reg = 0x2e004, 2110 .clkr = { 2111 .enable_reg = 0x2e004, 2112 .enable_mask = BIT(0), 2113 .hw.init = &(struct clk_init_data){ 2114 .name = "gcc_blsp2_qup5_spi_apps_clk", 2115 .parent_hws = (const struct clk_hw*[]){ 2116 &blsp2_qup5_spi_apps_clk_src.clkr.hw, 2117 }, 2118 .num_parents = 1, 2119 .flags = CLK_SET_RATE_PARENT, 2120 .ops = &clk_branch2_ops, 2121 }, 2122 }, 2123 }; 2124 2125 static struct clk_branch gcc_blsp2_qup5_i2c_apps_clk = { 2126 .halt_reg = 0x2e008, 2127 .clkr = { 2128 .enable_reg = 0x2e008, 2129 .enable_mask = BIT(0), 2130 .hw.init = &(struct clk_init_data){ 2131 .name = "gcc_blsp2_qup5_i2c_apps_clk", 2132 .parent_hws = (const struct clk_hw*[]){ 2133 &blsp2_qup5_i2c_apps_clk_src.clkr.hw, 2134 }, 2135 .num_parents = 1, 2136 .flags = CLK_SET_RATE_PARENT, 2137 .ops = &clk_branch2_ops, 2138 }, 2139 }, 2140 }; 2141 2142 static struct clk_branch gcc_blsp2_uart5_apps_clk = { 2143 .halt_reg = 0x2f004, 2144 .clkr = { 2145 .enable_reg = 0x2f004, 2146 .enable_mask = BIT(0), 2147 .hw.init = &(struct clk_init_data){ 2148 .name = "gcc_blsp2_uart5_apps_clk", 2149 .parent_hws = (const struct clk_hw*[]){ 2150 &blsp2_uart5_apps_clk_src.clkr.hw, 2151 }, 2152 .num_parents = 1, 2153 .flags = CLK_SET_RATE_PARENT, 2154 .ops = &clk_branch2_ops, 2155 }, 2156 }, 2157 }; 2158 2159 static struct clk_branch gcc_blsp2_qup6_spi_apps_clk = { 2160 .halt_reg = 0x30004, 2161 .clkr = { 2162 .enable_reg = 0x30004, 2163 .enable_mask = BIT(0), 2164 .hw.init = &(struct clk_init_data){ 2165 .name = "gcc_blsp2_qup6_spi_apps_clk", 2166 .parent_hws = (const struct clk_hw*[]){ 2167 &blsp2_qup6_spi_apps_clk_src.clkr.hw, 2168 }, 2169 .num_parents = 1, 2170 .flags = CLK_SET_RATE_PARENT, 2171 .ops = &clk_branch2_ops, 2172 }, 2173 }, 2174 }; 2175 2176 static struct clk_branch gcc_blsp2_qup6_i2c_apps_clk = { 2177 .halt_reg = 0x30008, 2178 .clkr = { 2179 .enable_reg = 0x30008, 2180 .enable_mask = BIT(0), 2181 .hw.init = &(struct clk_init_data){ 2182 .name = "gcc_blsp2_qup6_i2c_apps_clk", 2183 .parent_hws = (const struct clk_hw*[]){ 2184 &blsp2_qup6_i2c_apps_clk_src.clkr.hw, 2185 }, 2186 .num_parents = 1, 2187 .flags = CLK_SET_RATE_PARENT, 2188 .ops = &clk_branch2_ops, 2189 }, 2190 }, 2191 }; 2192 2193 static struct clk_branch gcc_blsp2_uart6_apps_clk = { 2194 .halt_reg = 0x31004, 2195 .clkr = { 2196 .enable_reg = 0x31004, 2197 .enable_mask = BIT(0), 2198 .hw.init = &(struct clk_init_data){ 2199 .name = "gcc_blsp2_uart6_apps_clk", 2200 .parent_hws = (const struct clk_hw*[]){ 2201 &blsp2_uart6_apps_clk_src.clkr.hw, 2202 }, 2203 .num_parents = 1, 2204 .flags = CLK_SET_RATE_PARENT, 2205 .ops = &clk_branch2_ops, 2206 }, 2207 }, 2208 }; 2209 2210 static struct clk_branch gcc_pdm_ahb_clk = { 2211 .halt_reg = 0x33004, 2212 .clkr = { 2213 .enable_reg = 0x33004, 2214 .enable_mask = BIT(0), 2215 .hw.init = &(struct clk_init_data){ 2216 .name = "gcc_pdm_ahb_clk", 2217 .ops = &clk_branch2_ops, 2218 }, 2219 }, 2220 }; 2221 2222 static struct clk_branch gcc_pdm2_clk = { 2223 .halt_reg = 0x3300c, 2224 .clkr = { 2225 .enable_reg = 0x3300c, 2226 .enable_mask = BIT(0), 2227 .hw.init = &(struct clk_init_data){ 2228 .name = "gcc_pdm2_clk", 2229 .parent_hws = (const struct clk_hw*[]){ 2230 &pdm2_clk_src.clkr.hw, 2231 }, 2232 .num_parents = 1, 2233 .flags = CLK_SET_RATE_PARENT, 2234 .ops = &clk_branch2_ops, 2235 }, 2236 }, 2237 }; 2238 2239 static struct clk_branch gcc_prng_ahb_clk = { 2240 .halt_reg = 0x34004, 2241 .halt_check = BRANCH_HALT_VOTED, 2242 .clkr = { 2243 .enable_reg = 0x52004, 2244 .enable_mask = BIT(13), 2245 .hw.init = &(struct clk_init_data){ 2246 .name = "gcc_prng_ahb_clk", 2247 .ops = &clk_branch2_ops, 2248 }, 2249 }, 2250 }; 2251 2252 static struct clk_branch gcc_tsif_ahb_clk = { 2253 .halt_reg = 0x36004, 2254 .clkr = { 2255 .enable_reg = 0x36004, 2256 .enable_mask = BIT(0), 2257 .hw.init = &(struct clk_init_data){ 2258 .name = "gcc_tsif_ahb_clk", 2259 .ops = &clk_branch2_ops, 2260 }, 2261 }, 2262 }; 2263 2264 static struct clk_branch gcc_tsif_ref_clk = { 2265 .halt_reg = 0x36008, 2266 .clkr = { 2267 .enable_reg = 0x36008, 2268 .enable_mask = BIT(0), 2269 .hw.init = &(struct clk_init_data){ 2270 .name = "gcc_tsif_ref_clk", 2271 .parent_hws = (const struct clk_hw*[]){ 2272 &tsif_ref_clk_src.clkr.hw, 2273 }, 2274 .num_parents = 1, 2275 .flags = CLK_SET_RATE_PARENT, 2276 .ops = &clk_branch2_ops, 2277 }, 2278 }, 2279 }; 2280 2281 static struct clk_branch gcc_tsif_inactivity_timers_clk = { 2282 .halt_reg = 0x3600c, 2283 .clkr = { 2284 .enable_reg = 0x3600c, 2285 .enable_mask = BIT(0), 2286 .hw.init = &(struct clk_init_data){ 2287 .name = "gcc_tsif_inactivity_timers_clk", 2288 .parent_hws = (const struct clk_hw*[]){ 2289 &gcc_sleep_clk_src.clkr.hw, 2290 }, 2291 .num_parents = 1, 2292 .flags = CLK_SET_RATE_PARENT, 2293 .ops = &clk_branch2_ops, 2294 }, 2295 }, 2296 }; 2297 2298 static struct clk_branch gcc_boot_rom_ahb_clk = { 2299 .halt_reg = 0x38004, 2300 .halt_check = BRANCH_HALT_VOTED, 2301 .clkr = { 2302 .enable_reg = 0x52004, 2303 .enable_mask = BIT(10), 2304 .hw.init = &(struct clk_init_data){ 2305 .name = "gcc_boot_rom_ahb_clk", 2306 .ops = &clk_branch2_ops, 2307 }, 2308 }, 2309 }; 2310 2311 static struct clk_branch gcc_bimc_gfx_clk = { 2312 .halt_reg = 0x46018, 2313 .clkr = { 2314 .enable_reg = 0x46018, 2315 .enable_mask = BIT(0), 2316 .hw.init = &(struct clk_init_data){ 2317 .name = "gcc_bimc_gfx_clk", 2318 .flags = CLK_SET_RATE_PARENT, 2319 .ops = &clk_branch2_ops, 2320 }, 2321 }, 2322 }; 2323 2324 static struct clk_branch gcc_hmss_rbcpr_clk = { 2325 .halt_reg = 0x4800c, 2326 .clkr = { 2327 .enable_reg = 0x4800c, 2328 .enable_mask = BIT(0), 2329 .hw.init = &(struct clk_init_data){ 2330 .name = "gcc_hmss_rbcpr_clk", 2331 .parent_hws = (const struct clk_hw*[]){ 2332 &hmss_rbcpr_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_gp1_clk = { 2342 .halt_reg = 0x64000, 2343 .clkr = { 2344 .enable_reg = 0x64000, 2345 .enable_mask = BIT(0), 2346 .hw.init = &(struct clk_init_data){ 2347 .name = "gcc_gp1_clk", 2348 .parent_hws = (const struct clk_hw*[]){ 2349 &gp1_clk_src.clkr.hw, 2350 }, 2351 .num_parents = 1, 2352 .flags = CLK_SET_RATE_PARENT, 2353 .ops = &clk_branch2_ops, 2354 }, 2355 }, 2356 }; 2357 2358 static struct clk_branch gcc_gp2_clk = { 2359 .halt_reg = 0x65000, 2360 .clkr = { 2361 .enable_reg = 0x65000, 2362 .enable_mask = BIT(0), 2363 .hw.init = &(struct clk_init_data){ 2364 .name = "gcc_gp2_clk", 2365 .parent_hws = (const struct clk_hw*[]){ 2366 &gp2_clk_src.clkr.hw, 2367 }, 2368 .num_parents = 1, 2369 .flags = CLK_SET_RATE_PARENT, 2370 .ops = &clk_branch2_ops, 2371 }, 2372 }, 2373 }; 2374 2375 static struct clk_branch gcc_gp3_clk = { 2376 .halt_reg = 0x66000, 2377 .clkr = { 2378 .enable_reg = 0x66000, 2379 .enable_mask = BIT(0), 2380 .hw.init = &(struct clk_init_data){ 2381 .name = "gcc_gp3_clk", 2382 .parent_hws = (const struct clk_hw*[]){ 2383 &gp3_clk_src.clkr.hw, 2384 }, 2385 .num_parents = 1, 2386 .flags = CLK_SET_RATE_PARENT, 2387 .ops = &clk_branch2_ops, 2388 }, 2389 }, 2390 }; 2391 2392 static struct clk_branch gcc_pcie_0_slv_axi_clk = { 2393 .halt_reg = 0x6b008, 2394 .clkr = { 2395 .enable_reg = 0x6b008, 2396 .enable_mask = BIT(0), 2397 .hw.init = &(struct clk_init_data){ 2398 .name = "gcc_pcie_0_slv_axi_clk", 2399 .ops = &clk_branch2_ops, 2400 }, 2401 }, 2402 }; 2403 2404 static struct clk_branch gcc_pcie_0_mstr_axi_clk = { 2405 .halt_reg = 0x6b00c, 2406 .clkr = { 2407 .enable_reg = 0x6b00c, 2408 .enable_mask = BIT(0), 2409 .hw.init = &(struct clk_init_data){ 2410 .name = "gcc_pcie_0_mstr_axi_clk", 2411 .ops = &clk_branch2_ops, 2412 }, 2413 }, 2414 }; 2415 2416 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = { 2417 .halt_reg = 0x6b010, 2418 .clkr = { 2419 .enable_reg = 0x6b010, 2420 .enable_mask = BIT(0), 2421 .hw.init = &(struct clk_init_data){ 2422 .name = "gcc_pcie_0_cfg_ahb_clk", 2423 .ops = &clk_branch2_ops, 2424 }, 2425 }, 2426 }; 2427 2428 static struct clk_branch gcc_pcie_0_aux_clk = { 2429 .halt_reg = 0x6b014, 2430 .clkr = { 2431 .enable_reg = 0x6b014, 2432 .enable_mask = BIT(0), 2433 .hw.init = &(struct clk_init_data){ 2434 .name = "gcc_pcie_0_aux_clk", 2435 .parent_hws = (const struct clk_hw*[]){ 2436 &pcie_aux_clk_src.clkr.hw, 2437 }, 2438 .num_parents = 1, 2439 .flags = CLK_SET_RATE_PARENT, 2440 .ops = &clk_branch2_ops, 2441 }, 2442 }, 2443 }; 2444 2445 static struct clk_branch gcc_pcie_0_pipe_clk = { 2446 .halt_reg = 0x6b018, 2447 .halt_check = BRANCH_HALT_SKIP, 2448 .clkr = { 2449 .enable_reg = 0x6b018, 2450 .enable_mask = BIT(0), 2451 .hw.init = &(struct clk_init_data){ 2452 .name = "gcc_pcie_0_pipe_clk", 2453 .parent_data = &(const struct clk_parent_data){ 2454 .fw_name = "pcie_0_pipe_clk_src", .name = "pcie_0_pipe_clk_src", 2455 }, 2456 .num_parents = 1, 2457 .flags = CLK_SET_RATE_PARENT, 2458 .ops = &clk_branch2_ops, 2459 }, 2460 }, 2461 }; 2462 2463 static struct clk_branch gcc_pcie_1_slv_axi_clk = { 2464 .halt_reg = 0x6d008, 2465 .clkr = { 2466 .enable_reg = 0x6d008, 2467 .enable_mask = BIT(0), 2468 .hw.init = &(struct clk_init_data){ 2469 .name = "gcc_pcie_1_slv_axi_clk", 2470 .ops = &clk_branch2_ops, 2471 }, 2472 }, 2473 }; 2474 2475 static struct clk_branch gcc_pcie_1_mstr_axi_clk = { 2476 .halt_reg = 0x6d00c, 2477 .clkr = { 2478 .enable_reg = 0x6d00c, 2479 .enable_mask = BIT(0), 2480 .hw.init = &(struct clk_init_data){ 2481 .name = "gcc_pcie_1_mstr_axi_clk", 2482 .ops = &clk_branch2_ops, 2483 }, 2484 }, 2485 }; 2486 2487 static struct clk_branch gcc_pcie_1_cfg_ahb_clk = { 2488 .halt_reg = 0x6d010, 2489 .clkr = { 2490 .enable_reg = 0x6d010, 2491 .enable_mask = BIT(0), 2492 .hw.init = &(struct clk_init_data){ 2493 .name = "gcc_pcie_1_cfg_ahb_clk", 2494 .ops = &clk_branch2_ops, 2495 }, 2496 }, 2497 }; 2498 2499 static struct clk_branch gcc_pcie_1_aux_clk = { 2500 .halt_reg = 0x6d014, 2501 .clkr = { 2502 .enable_reg = 0x6d014, 2503 .enable_mask = BIT(0), 2504 .hw.init = &(struct clk_init_data){ 2505 .name = "gcc_pcie_1_aux_clk", 2506 .parent_hws = (const struct clk_hw*[]){ 2507 &pcie_aux_clk_src.clkr.hw, 2508 }, 2509 .num_parents = 1, 2510 .flags = CLK_SET_RATE_PARENT, 2511 .ops = &clk_branch2_ops, 2512 }, 2513 }, 2514 }; 2515 2516 static struct clk_branch gcc_pcie_1_pipe_clk = { 2517 .halt_reg = 0x6d018, 2518 .halt_check = BRANCH_HALT_SKIP, 2519 .clkr = { 2520 .enable_reg = 0x6d018, 2521 .enable_mask = BIT(0), 2522 .hw.init = &(struct clk_init_data){ 2523 .name = "gcc_pcie_1_pipe_clk", 2524 .parent_data = &(const struct clk_parent_data){ 2525 .fw_name = "pcie_1_pipe_clk_src", .name = "pcie_1_pipe_clk_src", 2526 }, 2527 .num_parents = 1, 2528 .flags = CLK_SET_RATE_PARENT, 2529 .ops = &clk_branch2_ops, 2530 }, 2531 }, 2532 }; 2533 2534 static struct clk_branch gcc_pcie_2_slv_axi_clk = { 2535 .halt_reg = 0x6e008, 2536 .clkr = { 2537 .enable_reg = 0x6e008, 2538 .enable_mask = BIT(0), 2539 .hw.init = &(struct clk_init_data){ 2540 .name = "gcc_pcie_2_slv_axi_clk", 2541 .ops = &clk_branch2_ops, 2542 }, 2543 }, 2544 }; 2545 2546 static struct clk_branch gcc_pcie_2_mstr_axi_clk = { 2547 .halt_reg = 0x6e00c, 2548 .clkr = { 2549 .enable_reg = 0x6e00c, 2550 .enable_mask = BIT(0), 2551 .hw.init = &(struct clk_init_data){ 2552 .name = "gcc_pcie_2_mstr_axi_clk", 2553 .ops = &clk_branch2_ops, 2554 }, 2555 }, 2556 }; 2557 2558 static struct clk_branch gcc_pcie_2_cfg_ahb_clk = { 2559 .halt_reg = 0x6e010, 2560 .clkr = { 2561 .enable_reg = 0x6e010, 2562 .enable_mask = BIT(0), 2563 .hw.init = &(struct clk_init_data){ 2564 .name = "gcc_pcie_2_cfg_ahb_clk", 2565 .ops = &clk_branch2_ops, 2566 }, 2567 }, 2568 }; 2569 2570 static struct clk_branch gcc_pcie_2_aux_clk = { 2571 .halt_reg = 0x6e014, 2572 .clkr = { 2573 .enable_reg = 0x6e014, 2574 .enable_mask = BIT(0), 2575 .hw.init = &(struct clk_init_data){ 2576 .name = "gcc_pcie_2_aux_clk", 2577 .parent_hws = (const struct clk_hw*[]){ 2578 &pcie_aux_clk_src.clkr.hw, 2579 }, 2580 .num_parents = 1, 2581 .flags = CLK_SET_RATE_PARENT, 2582 .ops = &clk_branch2_ops, 2583 }, 2584 }, 2585 }; 2586 2587 static struct clk_branch gcc_pcie_2_pipe_clk = { 2588 .halt_reg = 0x6e018, 2589 .halt_check = BRANCH_HALT_SKIP, 2590 .clkr = { 2591 .enable_reg = 0x6e018, 2592 .enable_mask = BIT(0), 2593 .hw.init = &(struct clk_init_data){ 2594 .name = "gcc_pcie_2_pipe_clk", 2595 .parent_data = &(const struct clk_parent_data){ 2596 .fw_name = "pcie_2_pipe_clk_src", .name = "pcie_2_pipe_clk_src", 2597 }, 2598 .num_parents = 1, 2599 .flags = CLK_SET_RATE_PARENT, 2600 .ops = &clk_branch2_ops, 2601 }, 2602 }, 2603 }; 2604 2605 static struct clk_branch gcc_pcie_phy_cfg_ahb_clk = { 2606 .halt_reg = 0x6f004, 2607 .clkr = { 2608 .enable_reg = 0x6f004, 2609 .enable_mask = BIT(0), 2610 .hw.init = &(struct clk_init_data){ 2611 .name = "gcc_pcie_phy_cfg_ahb_clk", 2612 .ops = &clk_branch2_ops, 2613 }, 2614 }, 2615 }; 2616 2617 static struct clk_branch gcc_pcie_phy_aux_clk = { 2618 .halt_reg = 0x6f008, 2619 .clkr = { 2620 .enable_reg = 0x6f008, 2621 .enable_mask = BIT(0), 2622 .hw.init = &(struct clk_init_data){ 2623 .name = "gcc_pcie_phy_aux_clk", 2624 .parent_hws = (const struct clk_hw*[]){ 2625 &pcie_aux_clk_src.clkr.hw, 2626 }, 2627 .num_parents = 1, 2628 .flags = CLK_SET_RATE_PARENT, 2629 .ops = &clk_branch2_ops, 2630 }, 2631 }, 2632 }; 2633 2634 static struct clk_branch gcc_ufs_axi_clk = { 2635 .halt_reg = 0x75008, 2636 .clkr = { 2637 .enable_reg = 0x75008, 2638 .enable_mask = BIT(0), 2639 .hw.init = &(struct clk_init_data){ 2640 .name = "gcc_ufs_axi_clk", 2641 .parent_hws = (const struct clk_hw*[]){ 2642 &ufs_axi_clk_src.clkr.hw, 2643 }, 2644 .num_parents = 1, 2645 .flags = CLK_SET_RATE_PARENT, 2646 .ops = &clk_branch2_ops, 2647 }, 2648 }, 2649 }; 2650 2651 static struct clk_branch gcc_ufs_ahb_clk = { 2652 .halt_reg = 0x7500c, 2653 .clkr = { 2654 .enable_reg = 0x7500c, 2655 .enable_mask = BIT(0), 2656 .hw.init = &(struct clk_init_data){ 2657 .name = "gcc_ufs_ahb_clk", 2658 .ops = &clk_branch2_ops, 2659 }, 2660 }, 2661 }; 2662 2663 static struct clk_fixed_factor ufs_tx_cfg_clk_src = { 2664 .mult = 1, 2665 .div = 16, 2666 .hw.init = &(struct clk_init_data){ 2667 .name = "ufs_tx_cfg_clk_src", 2668 .parent_hws = (const struct clk_hw*[]){ 2669 &ufs_axi_clk_src.clkr.hw, 2670 }, 2671 .num_parents = 1, 2672 .flags = CLK_SET_RATE_PARENT, 2673 .ops = &clk_fixed_factor_ops, 2674 }, 2675 }; 2676 2677 static struct clk_branch gcc_ufs_tx_cfg_clk = { 2678 .halt_reg = 0x75010, 2679 .clkr = { 2680 .enable_reg = 0x75010, 2681 .enable_mask = BIT(0), 2682 .hw.init = &(struct clk_init_data){ 2683 .name = "gcc_ufs_tx_cfg_clk", 2684 .parent_hws = (const struct clk_hw*[]){ 2685 &ufs_tx_cfg_clk_src.hw, 2686 }, 2687 .num_parents = 1, 2688 .flags = CLK_SET_RATE_PARENT, 2689 .ops = &clk_branch2_ops, 2690 }, 2691 }, 2692 }; 2693 2694 static struct clk_fixed_factor ufs_rx_cfg_clk_src = { 2695 .mult = 1, 2696 .div = 16, 2697 .hw.init = &(struct clk_init_data){ 2698 .name = "ufs_rx_cfg_clk_src", 2699 .parent_hws = (const struct clk_hw*[]){ 2700 &ufs_axi_clk_src.clkr.hw, 2701 }, 2702 .num_parents = 1, 2703 .flags = CLK_SET_RATE_PARENT, 2704 .ops = &clk_fixed_factor_ops, 2705 }, 2706 }; 2707 2708 static struct clk_branch gcc_hlos1_vote_lpass_core_smmu_clk = { 2709 .halt_reg = 0x7d010, 2710 .halt_check = BRANCH_HALT_VOTED, 2711 .clkr = { 2712 .enable_reg = 0x7d010, 2713 .enable_mask = BIT(0), 2714 .hw.init = &(struct clk_init_data){ 2715 .name = "hlos1_vote_lpass_core_smmu_clk", 2716 .ops = &clk_branch2_ops, 2717 }, 2718 }, 2719 }; 2720 2721 static struct clk_branch gcc_hlos1_vote_lpass_adsp_smmu_clk = { 2722 .halt_reg = 0x7d014, 2723 .halt_check = BRANCH_HALT_VOTED, 2724 .clkr = { 2725 .enable_reg = 0x7d014, 2726 .enable_mask = BIT(0), 2727 .hw.init = &(struct clk_init_data){ 2728 .name = "hlos1_vote_lpass_adsp_smmu_clk", 2729 .ops = &clk_branch2_ops, 2730 }, 2731 }, 2732 }; 2733 2734 static struct clk_branch gcc_ufs_rx_cfg_clk = { 2735 .halt_reg = 0x75014, 2736 .clkr = { 2737 .enable_reg = 0x75014, 2738 .enable_mask = BIT(0), 2739 .hw.init = &(struct clk_init_data){ 2740 .name = "gcc_ufs_rx_cfg_clk", 2741 .parent_hws = (const struct clk_hw*[]){ 2742 &ufs_rx_cfg_clk_src.hw, 2743 }, 2744 .num_parents = 1, 2745 .flags = CLK_SET_RATE_PARENT, 2746 .ops = &clk_branch2_ops, 2747 }, 2748 }, 2749 }; 2750 2751 static struct clk_branch gcc_ufs_tx_symbol_0_clk = { 2752 .halt_reg = 0x75018, 2753 .halt_check = BRANCH_HALT_SKIP, 2754 .clkr = { 2755 .enable_reg = 0x75018, 2756 .enable_mask = BIT(0), 2757 .hw.init = &(struct clk_init_data){ 2758 .name = "gcc_ufs_tx_symbol_0_clk", 2759 .parent_data = &(const struct clk_parent_data){ 2760 .fw_name = "ufs_tx_symbol_0_clk_src", .name = "ufs_tx_symbol_0_clk_src", 2761 }, 2762 .num_parents = 1, 2763 .flags = CLK_SET_RATE_PARENT, 2764 .ops = &clk_branch2_ops, 2765 }, 2766 }, 2767 }; 2768 2769 static struct clk_branch gcc_ufs_rx_symbol_0_clk = { 2770 .halt_reg = 0x7501c, 2771 .halt_check = BRANCH_HALT_SKIP, 2772 .clkr = { 2773 .enable_reg = 0x7501c, 2774 .enable_mask = BIT(0), 2775 .hw.init = &(struct clk_init_data){ 2776 .name = "gcc_ufs_rx_symbol_0_clk", 2777 .parent_data = &(const struct clk_parent_data){ 2778 .fw_name = "ufs_rx_symbol_0_clk_src", .name = "ufs_rx_symbol_0_clk_src", 2779 }, 2780 .num_parents = 1, 2781 .flags = CLK_SET_RATE_PARENT, 2782 .ops = &clk_branch2_ops, 2783 }, 2784 }, 2785 }; 2786 2787 static struct clk_branch gcc_ufs_rx_symbol_1_clk = { 2788 .halt_reg = 0x75020, 2789 .halt_check = BRANCH_HALT_SKIP, 2790 .clkr = { 2791 .enable_reg = 0x75020, 2792 .enable_mask = BIT(0), 2793 .hw.init = &(struct clk_init_data){ 2794 .name = "gcc_ufs_rx_symbol_1_clk", 2795 .parent_data = &(const struct clk_parent_data){ 2796 .fw_name = "ufs_rx_symbol_1_clk_src", .name = "ufs_rx_symbol_1_clk_src", 2797 }, 2798 .num_parents = 1, 2799 .flags = CLK_SET_RATE_PARENT, 2800 .ops = &clk_branch2_ops, 2801 }, 2802 }, 2803 }; 2804 2805 static struct clk_fixed_factor ufs_ice_core_postdiv_clk_src = { 2806 .mult = 1, 2807 .div = 2, 2808 .hw.init = &(struct clk_init_data){ 2809 .name = "ufs_ice_core_postdiv_clk_src", 2810 .parent_hws = (const struct clk_hw*[]){ 2811 &ufs_ice_core_clk_src.clkr.hw, 2812 }, 2813 .num_parents = 1, 2814 .flags = CLK_SET_RATE_PARENT, 2815 .ops = &clk_fixed_factor_ops, 2816 }, 2817 }; 2818 2819 static struct clk_branch gcc_ufs_unipro_core_clk = { 2820 .halt_reg = 0x7600c, 2821 .clkr = { 2822 .enable_reg = 0x7600c, 2823 .enable_mask = BIT(0), 2824 .hw.init = &(struct clk_init_data){ 2825 .name = "gcc_ufs_unipro_core_clk", 2826 .parent_hws = (const struct clk_hw*[]){ 2827 &ufs_ice_core_postdiv_clk_src.hw, 2828 }, 2829 .num_parents = 1, 2830 .flags = CLK_SET_RATE_PARENT, 2831 .ops = &clk_branch2_ops, 2832 }, 2833 }, 2834 }; 2835 2836 static struct clk_branch gcc_ufs_ice_core_clk = { 2837 .halt_reg = 0x76010, 2838 .clkr = { 2839 .enable_reg = 0x76010, 2840 .enable_mask = BIT(0), 2841 .hw.init = &(struct clk_init_data){ 2842 .name = "gcc_ufs_ice_core_clk", 2843 .parent_hws = (const struct clk_hw*[]){ 2844 &ufs_ice_core_clk_src.clkr.hw, 2845 }, 2846 .num_parents = 1, 2847 .flags = CLK_SET_RATE_PARENT, 2848 .ops = &clk_branch2_ops, 2849 }, 2850 }, 2851 }; 2852 2853 static struct clk_branch gcc_ufs_sys_clk_core_clk = { 2854 .halt_check = BRANCH_HALT_DELAY, 2855 .clkr = { 2856 .enable_reg = 0x76030, 2857 .enable_mask = BIT(0), 2858 .hw.init = &(struct clk_init_data){ 2859 .name = "gcc_ufs_sys_clk_core_clk", 2860 .ops = &clk_branch2_ops, 2861 }, 2862 }, 2863 }; 2864 2865 static struct clk_branch gcc_ufs_tx_symbol_clk_core_clk = { 2866 .halt_check = BRANCH_HALT_DELAY, 2867 .clkr = { 2868 .enable_reg = 0x76034, 2869 .enable_mask = BIT(0), 2870 .hw.init = &(struct clk_init_data){ 2871 .name = "gcc_ufs_tx_symbol_clk_core_clk", 2872 .ops = &clk_branch2_ops, 2873 }, 2874 }, 2875 }; 2876 2877 static struct clk_branch gcc_aggre0_snoc_axi_clk = { 2878 .halt_reg = 0x81008, 2879 .clkr = { 2880 .enable_reg = 0x81008, 2881 .enable_mask = BIT(0), 2882 .hw.init = &(struct clk_init_data){ 2883 .name = "gcc_aggre0_snoc_axi_clk", 2884 .flags = CLK_IS_CRITICAL, 2885 .ops = &clk_branch2_ops, 2886 }, 2887 }, 2888 }; 2889 2890 static struct clk_branch gcc_aggre0_cnoc_ahb_clk = { 2891 .halt_reg = 0x8100c, 2892 .clkr = { 2893 .enable_reg = 0x8100c, 2894 .enable_mask = BIT(0), 2895 .hw.init = &(struct clk_init_data){ 2896 .name = "gcc_aggre0_cnoc_ahb_clk", 2897 .flags = CLK_IS_CRITICAL, 2898 .ops = &clk_branch2_ops, 2899 }, 2900 }, 2901 }; 2902 2903 static struct clk_branch gcc_smmu_aggre0_axi_clk = { 2904 .halt_reg = 0x81014, 2905 .clkr = { 2906 .enable_reg = 0x81014, 2907 .enable_mask = BIT(0), 2908 .hw.init = &(struct clk_init_data){ 2909 .name = "gcc_smmu_aggre0_axi_clk", 2910 .flags = CLK_IS_CRITICAL, 2911 .ops = &clk_branch2_ops, 2912 }, 2913 }, 2914 }; 2915 2916 static struct clk_branch gcc_smmu_aggre0_ahb_clk = { 2917 .halt_reg = 0x81018, 2918 .clkr = { 2919 .enable_reg = 0x81018, 2920 .enable_mask = BIT(0), 2921 .hw.init = &(struct clk_init_data){ 2922 .name = "gcc_smmu_aggre0_ahb_clk", 2923 .flags = CLK_IS_CRITICAL, 2924 .ops = &clk_branch2_ops, 2925 }, 2926 }, 2927 }; 2928 2929 static struct clk_branch gcc_aggre2_ufs_axi_clk = { 2930 .halt_reg = 0x83014, 2931 .clkr = { 2932 .enable_reg = 0x83014, 2933 .enable_mask = BIT(0), 2934 .hw.init = &(struct clk_init_data){ 2935 .name = "gcc_aggre2_ufs_axi_clk", 2936 .parent_hws = (const struct clk_hw*[]){ 2937 &ufs_axi_clk_src.clkr.hw, 2938 }, 2939 .num_parents = 1, 2940 .flags = CLK_SET_RATE_PARENT, 2941 .ops = &clk_branch2_ops, 2942 }, 2943 }, 2944 }; 2945 2946 static struct clk_branch gcc_aggre2_usb3_axi_clk = { 2947 .halt_reg = 0x83018, 2948 .clkr = { 2949 .enable_reg = 0x83018, 2950 .enable_mask = BIT(0), 2951 .hw.init = &(struct clk_init_data){ 2952 .name = "gcc_aggre2_usb3_axi_clk", 2953 .parent_hws = (const struct clk_hw*[]){ 2954 &usb30_master_clk_src.clkr.hw, 2955 }, 2956 .num_parents = 1, 2957 .flags = CLK_SET_RATE_PARENT, 2958 .ops = &clk_branch2_ops, 2959 }, 2960 }, 2961 }; 2962 2963 static struct clk_branch gcc_dcc_ahb_clk = { 2964 .halt_reg = 0x84004, 2965 .clkr = { 2966 .enable_reg = 0x84004, 2967 .enable_mask = BIT(0), 2968 .hw.init = &(struct clk_init_data){ 2969 .name = "gcc_dcc_ahb_clk", 2970 .ops = &clk_branch2_ops, 2971 }, 2972 }, 2973 }; 2974 2975 static struct clk_branch gcc_aggre0_noc_mpu_cfg_ahb_clk = { 2976 .halt_reg = 0x85000, 2977 .clkr = { 2978 .enable_reg = 0x85000, 2979 .enable_mask = BIT(0), 2980 .hw.init = &(struct clk_init_data){ 2981 .name = "gcc_aggre0_noc_mpu_cfg_ahb_clk", 2982 .ops = &clk_branch2_ops, 2983 }, 2984 }, 2985 }; 2986 2987 static struct clk_branch gcc_qspi_ahb_clk = { 2988 .halt_reg = 0x8b004, 2989 .clkr = { 2990 .enable_reg = 0x8b004, 2991 .enable_mask = BIT(0), 2992 .hw.init = &(struct clk_init_data){ 2993 .name = "gcc_qspi_ahb_clk", 2994 .ops = &clk_branch2_ops, 2995 }, 2996 }, 2997 }; 2998 2999 static struct clk_branch gcc_qspi_ser_clk = { 3000 .halt_reg = 0x8b008, 3001 .clkr = { 3002 .enable_reg = 0x8b008, 3003 .enable_mask = BIT(0), 3004 .hw.init = &(struct clk_init_data){ 3005 .name = "gcc_qspi_ser_clk", 3006 .parent_hws = (const struct clk_hw*[]){ 3007 &qspi_ser_clk_src.clkr.hw, 3008 }, 3009 .num_parents = 1, 3010 .flags = CLK_SET_RATE_PARENT, 3011 .ops = &clk_branch2_ops, 3012 }, 3013 }, 3014 }; 3015 3016 static struct clk_branch gcc_usb3_clkref_clk = { 3017 .halt_reg = 0x8800C, 3018 .clkr = { 3019 .enable_reg = 0x8800C, 3020 .enable_mask = BIT(0), 3021 .hw.init = &(struct clk_init_data){ 3022 .name = "gcc_usb3_clkref_clk", 3023 .parent_data = &(const struct clk_parent_data){ 3024 .fw_name = "cxo2", 3025 .name = "xo", 3026 }, 3027 .num_parents = 1, 3028 .ops = &clk_branch2_ops, 3029 }, 3030 }, 3031 }; 3032 3033 static struct clk_branch gcc_hdmi_clkref_clk = { 3034 .halt_reg = 0x88000, 3035 .clkr = { 3036 .enable_reg = 0x88000, 3037 .enable_mask = BIT(0), 3038 .hw.init = &(struct clk_init_data){ 3039 .name = "gcc_hdmi_clkref_clk", 3040 .parent_data = &(const struct clk_parent_data){ 3041 .fw_name = "cxo2", 3042 .name = "xo", 3043 }, 3044 .num_parents = 1, 3045 .ops = &clk_branch2_ops, 3046 }, 3047 }, 3048 }; 3049 3050 static struct clk_branch gcc_edp_clkref_clk = { 3051 .halt_reg = 0x88004, 3052 .clkr = { 3053 .enable_reg = 0x88004, 3054 .enable_mask = BIT(0), 3055 .hw.init = &(struct clk_init_data){ 3056 .name = "gcc_edp_clkref_clk", 3057 .parent_data = &(const struct clk_parent_data){ 3058 .fw_name = "cxo2", 3059 .name = "xo", 3060 }, 3061 .num_parents = 1, 3062 .ops = &clk_branch2_ops, 3063 }, 3064 }, 3065 }; 3066 3067 static struct clk_branch gcc_ufs_clkref_clk = { 3068 .halt_reg = 0x88008, 3069 .clkr = { 3070 .enable_reg = 0x88008, 3071 .enable_mask = BIT(0), 3072 .hw.init = &(struct clk_init_data){ 3073 .name = "gcc_ufs_clkref_clk", 3074 .parent_data = &(const struct clk_parent_data){ 3075 .fw_name = "cxo2", 3076 .name = "xo", 3077 }, 3078 .num_parents = 1, 3079 .ops = &clk_branch2_ops, 3080 }, 3081 }, 3082 }; 3083 3084 static struct clk_branch gcc_pcie_clkref_clk = { 3085 .halt_reg = 0x88010, 3086 .clkr = { 3087 .enable_reg = 0x88010, 3088 .enable_mask = BIT(0), 3089 .hw.init = &(struct clk_init_data){ 3090 .name = "gcc_pcie_clkref_clk", 3091 .parent_data = &(const struct clk_parent_data){ 3092 .fw_name = "cxo2", 3093 .name = "xo", 3094 }, 3095 .num_parents = 1, 3096 .ops = &clk_branch2_ops, 3097 }, 3098 }, 3099 }; 3100 3101 static struct clk_branch gcc_rx2_usb2_clkref_clk = { 3102 .halt_reg = 0x88014, 3103 .clkr = { 3104 .enable_reg = 0x88014, 3105 .enable_mask = BIT(0), 3106 .hw.init = &(struct clk_init_data){ 3107 .name = "gcc_rx2_usb2_clkref_clk", 3108 .parent_data = &(const struct clk_parent_data){ 3109 .fw_name = "cxo2", 3110 .name = "xo", 3111 }, 3112 .num_parents = 1, 3113 .ops = &clk_branch2_ops, 3114 }, 3115 }, 3116 }; 3117 3118 static struct clk_branch gcc_rx1_usb2_clkref_clk = { 3119 .halt_reg = 0x88018, 3120 .clkr = { 3121 .enable_reg = 0x88018, 3122 .enable_mask = BIT(0), 3123 .hw.init = &(struct clk_init_data){ 3124 .name = "gcc_rx1_usb2_clkref_clk", 3125 .parent_data = &(const struct clk_parent_data){ 3126 .fw_name = "cxo2", 3127 .name = "xo", 3128 }, 3129 .num_parents = 1, 3130 .ops = &clk_branch2_ops, 3131 }, 3132 }, 3133 }; 3134 3135 static struct clk_branch gcc_mss_cfg_ahb_clk = { 3136 .halt_reg = 0x8a000, 3137 .clkr = { 3138 .enable_reg = 0x8a000, 3139 .enable_mask = BIT(0), 3140 .hw.init = &(struct clk_init_data){ 3141 .name = "gcc_mss_cfg_ahb_clk", 3142 .ops = &clk_branch2_ops, 3143 }, 3144 }, 3145 }; 3146 3147 static struct clk_branch gcc_mss_mnoc_bimc_axi_clk = { 3148 .halt_reg = 0x8a004, 3149 .clkr = { 3150 .enable_reg = 0x8a004, 3151 .enable_mask = BIT(0), 3152 .hw.init = &(struct clk_init_data){ 3153 .name = "gcc_mss_mnoc_bimc_axi_clk", 3154 .ops = &clk_branch2_ops, 3155 }, 3156 }, 3157 }; 3158 3159 static struct clk_branch gcc_mss_snoc_axi_clk = { 3160 .halt_reg = 0x8a024, 3161 .clkr = { 3162 .enable_reg = 0x8a024, 3163 .enable_mask = BIT(0), 3164 .hw.init = &(struct clk_init_data){ 3165 .name = "gcc_mss_snoc_axi_clk", 3166 .ops = &clk_branch2_ops, 3167 }, 3168 }, 3169 }; 3170 3171 static struct clk_branch gcc_mss_q6_bimc_axi_clk = { 3172 .halt_reg = 0x8a028, 3173 .clkr = { 3174 .enable_reg = 0x8a028, 3175 .enable_mask = BIT(0), 3176 .hw.init = &(struct clk_init_data){ 3177 .name = "gcc_mss_q6_bimc_axi_clk", 3178 .ops = &clk_branch2_ops, 3179 }, 3180 }, 3181 }; 3182 3183 static struct clk_hw *gcc_msm8996_hws[] = { 3184 &xo.hw, 3185 &gpll0_early_div.hw, 3186 &ufs_tx_cfg_clk_src.hw, 3187 &ufs_rx_cfg_clk_src.hw, 3188 &ufs_ice_core_postdiv_clk_src.hw, 3189 }; 3190 3191 static struct gdsc aggre0_noc_gdsc = { 3192 .gdscr = 0x81004, 3193 .gds_hw_ctrl = 0x81028, 3194 .pd = { 3195 .name = "aggre0_noc", 3196 }, 3197 .pwrsts = PWRSTS_OFF_ON, 3198 .flags = VOTABLE | ALWAYS_ON, 3199 }; 3200 3201 static struct gdsc hlos1_vote_aggre0_noc_gdsc = { 3202 .gdscr = 0x7d024, 3203 .pd = { 3204 .name = "hlos1_vote_aggre0_noc", 3205 }, 3206 .pwrsts = PWRSTS_OFF_ON, 3207 .flags = VOTABLE, 3208 }; 3209 3210 static struct gdsc hlos1_vote_lpass_adsp_gdsc = { 3211 .gdscr = 0x7d034, 3212 .pd = { 3213 .name = "hlos1_vote_lpass_adsp", 3214 }, 3215 .pwrsts = PWRSTS_OFF_ON, 3216 .flags = VOTABLE, 3217 }; 3218 3219 static struct gdsc hlos1_vote_lpass_core_gdsc = { 3220 .gdscr = 0x7d038, 3221 .pd = { 3222 .name = "hlos1_vote_lpass_core", 3223 }, 3224 .pwrsts = PWRSTS_OFF_ON, 3225 .flags = VOTABLE, 3226 }; 3227 3228 static struct gdsc usb30_gdsc = { 3229 .gdscr = 0xf004, 3230 .pd = { 3231 .name = "usb30", 3232 }, 3233 /* TODO: Change to OFF_ON when USB drivers get proper suspend support */ 3234 .pwrsts = PWRSTS_RET_ON, 3235 }; 3236 3237 static struct gdsc pcie0_gdsc = { 3238 .gdscr = 0x6b004, 3239 .pd = { 3240 .name = "pcie0", 3241 }, 3242 .pwrsts = PWRSTS_OFF_ON, 3243 }; 3244 3245 static struct gdsc pcie1_gdsc = { 3246 .gdscr = 0x6d004, 3247 .pd = { 3248 .name = "pcie1", 3249 }, 3250 .pwrsts = PWRSTS_OFF_ON, 3251 }; 3252 3253 static struct gdsc pcie2_gdsc = { 3254 .gdscr = 0x6e004, 3255 .pd = { 3256 .name = "pcie2", 3257 }, 3258 .pwrsts = PWRSTS_OFF_ON, 3259 }; 3260 3261 static struct gdsc ufs_gdsc = { 3262 .gdscr = 0x75004, 3263 .pd = { 3264 .name = "ufs", 3265 }, 3266 .pwrsts = PWRSTS_OFF_ON, 3267 }; 3268 3269 static struct clk_regmap *gcc_msm8996_clocks[] = { 3270 [GPLL0_EARLY] = &gpll0_early.clkr, 3271 [GPLL0] = &gpll0.clkr, 3272 [GPLL4_EARLY] = &gpll4_early.clkr, 3273 [GPLL4] = &gpll4.clkr, 3274 [USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr, 3275 [USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr, 3276 [USB3_PHY_AUX_CLK_SRC] = &usb3_phy_aux_clk_src.clkr, 3277 [USB20_MASTER_CLK_SRC] = &usb20_master_clk_src.clkr, 3278 [USB20_MOCK_UTMI_CLK_SRC] = &usb20_mock_utmi_clk_src.clkr, 3279 [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr, 3280 [SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr, 3281 [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr, 3282 [SDCC3_APPS_CLK_SRC] = &sdcc3_apps_clk_src.clkr, 3283 [SDCC4_APPS_CLK_SRC] = &sdcc4_apps_clk_src.clkr, 3284 [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr, 3285 [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr, 3286 [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr, 3287 [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr, 3288 [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr, 3289 [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr, 3290 [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr, 3291 [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr, 3292 [BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr, 3293 [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr, 3294 [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr, 3295 [BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr, 3296 [BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr, 3297 [BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr, 3298 [BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr, 3299 [BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr, 3300 [BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr, 3301 [BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr, 3302 [BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr, 3303 [BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr, 3304 [BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr, 3305 [BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr, 3306 [BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr, 3307 [BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr, 3308 [BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr, 3309 [BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr, 3310 [BLSP2_UART3_APPS_CLK_SRC] = &blsp2_uart3_apps_clk_src.clkr, 3311 [BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr, 3312 [BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr, 3313 [BLSP2_UART4_APPS_CLK_SRC] = &blsp2_uart4_apps_clk_src.clkr, 3314 [BLSP2_QUP5_SPI_APPS_CLK_SRC] = &blsp2_qup5_spi_apps_clk_src.clkr, 3315 [BLSP2_QUP5_I2C_APPS_CLK_SRC] = &blsp2_qup5_i2c_apps_clk_src.clkr, 3316 [BLSP2_UART5_APPS_CLK_SRC] = &blsp2_uart5_apps_clk_src.clkr, 3317 [BLSP2_QUP6_SPI_APPS_CLK_SRC] = &blsp2_qup6_spi_apps_clk_src.clkr, 3318 [BLSP2_QUP6_I2C_APPS_CLK_SRC] = &blsp2_qup6_i2c_apps_clk_src.clkr, 3319 [BLSP2_UART6_APPS_CLK_SRC] = &blsp2_uart6_apps_clk_src.clkr, 3320 [PDM2_CLK_SRC] = &pdm2_clk_src.clkr, 3321 [TSIF_REF_CLK_SRC] = &tsif_ref_clk_src.clkr, 3322 [GCC_SLEEP_CLK_SRC] = &gcc_sleep_clk_src.clkr, 3323 [HMSS_RBCPR_CLK_SRC] = &hmss_rbcpr_clk_src.clkr, 3324 [HMSS_GPLL0_CLK_SRC] = &hmss_gpll0_clk_src.clkr, 3325 [GP1_CLK_SRC] = &gp1_clk_src.clkr, 3326 [GP2_CLK_SRC] = &gp2_clk_src.clkr, 3327 [GP3_CLK_SRC] = &gp3_clk_src.clkr, 3328 [PCIE_AUX_CLK_SRC] = &pcie_aux_clk_src.clkr, 3329 [UFS_AXI_CLK_SRC] = &ufs_axi_clk_src.clkr, 3330 [UFS_ICE_CORE_CLK_SRC] = &ufs_ice_core_clk_src.clkr, 3331 [QSPI_SER_CLK_SRC] = &qspi_ser_clk_src.clkr, 3332 [GCC_SYS_NOC_USB3_AXI_CLK] = &gcc_sys_noc_usb3_axi_clk.clkr, 3333 [GCC_SYS_NOC_UFS_AXI_CLK] = &gcc_sys_noc_ufs_axi_clk.clkr, 3334 [GCC_PERIPH_NOC_USB20_AHB_CLK] = &gcc_periph_noc_usb20_ahb_clk.clkr, 3335 [GCC_MMSS_NOC_CFG_AHB_CLK] = &gcc_mmss_noc_cfg_ahb_clk.clkr, 3336 [GCC_MMSS_BIMC_GFX_CLK] = &gcc_mmss_bimc_gfx_clk.clkr, 3337 [GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr, 3338 [GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr, 3339 [GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr, 3340 [GCC_USB3_PHY_AUX_CLK] = &gcc_usb3_phy_aux_clk.clkr, 3341 [GCC_USB3_PHY_PIPE_CLK] = &gcc_usb3_phy_pipe_clk.clkr, 3342 [GCC_USB20_MASTER_CLK] = &gcc_usb20_master_clk.clkr, 3343 [GCC_USB20_SLEEP_CLK] = &gcc_usb20_sleep_clk.clkr, 3344 [GCC_USB20_MOCK_UTMI_CLK] = &gcc_usb20_mock_utmi_clk.clkr, 3345 [GCC_USB_PHY_CFG_AHB2PHY_CLK] = &gcc_usb_phy_cfg_ahb2phy_clk.clkr, 3346 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr, 3347 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr, 3348 [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr, 3349 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr, 3350 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr, 3351 [GCC_SDCC3_APPS_CLK] = &gcc_sdcc3_apps_clk.clkr, 3352 [GCC_SDCC3_AHB_CLK] = &gcc_sdcc3_ahb_clk.clkr, 3353 [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr, 3354 [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr, 3355 [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr, 3356 [GCC_BLSP1_SLEEP_CLK] = &gcc_blsp1_sleep_clk.clkr, 3357 [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr, 3358 [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr, 3359 [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr, 3360 [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr, 3361 [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr, 3362 [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr, 3363 [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr, 3364 [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr, 3365 [GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr, 3366 [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr, 3367 [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr, 3368 [GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr, 3369 [GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr, 3370 [GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr, 3371 [GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr, 3372 [GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr, 3373 [GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr, 3374 [GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr, 3375 [GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr, 3376 [GCC_BLSP2_SLEEP_CLK] = &gcc_blsp2_sleep_clk.clkr, 3377 [GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr, 3378 [GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr, 3379 [GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr, 3380 [GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr, 3381 [GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr, 3382 [GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr, 3383 [GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr, 3384 [GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr, 3385 [GCC_BLSP2_UART3_APPS_CLK] = &gcc_blsp2_uart3_apps_clk.clkr, 3386 [GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr, 3387 [GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr, 3388 [GCC_BLSP2_UART4_APPS_CLK] = &gcc_blsp2_uart4_apps_clk.clkr, 3389 [GCC_BLSP2_QUP5_SPI_APPS_CLK] = &gcc_blsp2_qup5_spi_apps_clk.clkr, 3390 [GCC_BLSP2_QUP5_I2C_APPS_CLK] = &gcc_blsp2_qup5_i2c_apps_clk.clkr, 3391 [GCC_BLSP2_UART5_APPS_CLK] = &gcc_blsp2_uart5_apps_clk.clkr, 3392 [GCC_BLSP2_QUP6_SPI_APPS_CLK] = &gcc_blsp2_qup6_spi_apps_clk.clkr, 3393 [GCC_BLSP2_QUP6_I2C_APPS_CLK] = &gcc_blsp2_qup6_i2c_apps_clk.clkr, 3394 [GCC_BLSP2_UART6_APPS_CLK] = &gcc_blsp2_uart6_apps_clk.clkr, 3395 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr, 3396 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr, 3397 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr, 3398 [GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr, 3399 [GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr, 3400 [GCC_TSIF_INACTIVITY_TIMERS_CLK] = &gcc_tsif_inactivity_timers_clk.clkr, 3401 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr, 3402 [GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr, 3403 [GCC_HMSS_RBCPR_CLK] = &gcc_hmss_rbcpr_clk.clkr, 3404 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr, 3405 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr, 3406 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr, 3407 [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr, 3408 [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr, 3409 [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr, 3410 [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr, 3411 [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr, 3412 [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr, 3413 [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr, 3414 [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr, 3415 [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr, 3416 [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr, 3417 [GCC_PCIE_2_SLV_AXI_CLK] = &gcc_pcie_2_slv_axi_clk.clkr, 3418 [GCC_PCIE_2_MSTR_AXI_CLK] = &gcc_pcie_2_mstr_axi_clk.clkr, 3419 [GCC_PCIE_2_CFG_AHB_CLK] = &gcc_pcie_2_cfg_ahb_clk.clkr, 3420 [GCC_PCIE_2_AUX_CLK] = &gcc_pcie_2_aux_clk.clkr, 3421 [GCC_PCIE_2_PIPE_CLK] = &gcc_pcie_2_pipe_clk.clkr, 3422 [GCC_PCIE_PHY_CFG_AHB_CLK] = &gcc_pcie_phy_cfg_ahb_clk.clkr, 3423 [GCC_PCIE_PHY_AUX_CLK] = &gcc_pcie_phy_aux_clk.clkr, 3424 [GCC_UFS_AXI_CLK] = &gcc_ufs_axi_clk.clkr, 3425 [GCC_UFS_AHB_CLK] = &gcc_ufs_ahb_clk.clkr, 3426 [GCC_UFS_TX_CFG_CLK] = &gcc_ufs_tx_cfg_clk.clkr, 3427 [GCC_UFS_RX_CFG_CLK] = &gcc_ufs_rx_cfg_clk.clkr, 3428 [GCC_HLOS1_VOTE_LPASS_CORE_SMMU_CLK] = &gcc_hlos1_vote_lpass_core_smmu_clk.clkr, 3429 [GCC_HLOS1_VOTE_LPASS_ADSP_SMMU_CLK] = &gcc_hlos1_vote_lpass_adsp_smmu_clk.clkr, 3430 [GCC_UFS_TX_SYMBOL_0_CLK] = &gcc_ufs_tx_symbol_0_clk.clkr, 3431 [GCC_UFS_RX_SYMBOL_0_CLK] = &gcc_ufs_rx_symbol_0_clk.clkr, 3432 [GCC_UFS_RX_SYMBOL_1_CLK] = &gcc_ufs_rx_symbol_1_clk.clkr, 3433 [GCC_UFS_UNIPRO_CORE_CLK] = &gcc_ufs_unipro_core_clk.clkr, 3434 [GCC_UFS_ICE_CORE_CLK] = &gcc_ufs_ice_core_clk.clkr, 3435 [GCC_UFS_SYS_CLK_CORE_CLK] = &gcc_ufs_sys_clk_core_clk.clkr, 3436 [GCC_UFS_TX_SYMBOL_CLK_CORE_CLK] = &gcc_ufs_tx_symbol_clk_core_clk.clkr, 3437 [GCC_AGGRE0_SNOC_AXI_CLK] = &gcc_aggre0_snoc_axi_clk.clkr, 3438 [GCC_AGGRE0_CNOC_AHB_CLK] = &gcc_aggre0_cnoc_ahb_clk.clkr, 3439 [GCC_SMMU_AGGRE0_AXI_CLK] = &gcc_smmu_aggre0_axi_clk.clkr, 3440 [GCC_SMMU_AGGRE0_AHB_CLK] = &gcc_smmu_aggre0_ahb_clk.clkr, 3441 [GCC_AGGRE2_UFS_AXI_CLK] = &gcc_aggre2_ufs_axi_clk.clkr, 3442 [GCC_AGGRE2_USB3_AXI_CLK] = &gcc_aggre2_usb3_axi_clk.clkr, 3443 [GCC_QSPI_AHB_CLK] = &gcc_qspi_ahb_clk.clkr, 3444 [GCC_QSPI_SER_CLK] = &gcc_qspi_ser_clk.clkr, 3445 [GCC_USB3_CLKREF_CLK] = &gcc_usb3_clkref_clk.clkr, 3446 [GCC_HDMI_CLKREF_CLK] = &gcc_hdmi_clkref_clk.clkr, 3447 [GCC_UFS_CLKREF_CLK] = &gcc_ufs_clkref_clk.clkr, 3448 [GCC_PCIE_CLKREF_CLK] = &gcc_pcie_clkref_clk.clkr, 3449 [GCC_RX2_USB2_CLKREF_CLK] = &gcc_rx2_usb2_clkref_clk.clkr, 3450 [GCC_RX1_USB2_CLKREF_CLK] = &gcc_rx1_usb2_clkref_clk.clkr, 3451 [GCC_EDP_CLKREF_CLK] = &gcc_edp_clkref_clk.clkr, 3452 [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr, 3453 [GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr, 3454 [GCC_MSS_SNOC_AXI_CLK] = &gcc_mss_snoc_axi_clk.clkr, 3455 [GCC_MSS_MNOC_BIMC_AXI_CLK] = &gcc_mss_mnoc_bimc_axi_clk.clkr, 3456 [GCC_DCC_AHB_CLK] = &gcc_dcc_ahb_clk.clkr, 3457 [GCC_AGGRE0_NOC_MPU_CFG_AHB_CLK] = &gcc_aggre0_noc_mpu_cfg_ahb_clk.clkr, 3458 [GCC_MMSS_GPLL0_DIV_CLK] = &gcc_mmss_gpll0_div_clk.clkr, 3459 [GCC_MSS_GPLL0_DIV_CLK] = &gcc_mss_gpll0_div_clk.clkr, 3460 }; 3461 3462 static struct gdsc *gcc_msm8996_gdscs[] = { 3463 [AGGRE0_NOC_GDSC] = &aggre0_noc_gdsc, 3464 [HLOS1_VOTE_AGGRE0_NOC_GDSC] = &hlos1_vote_aggre0_noc_gdsc, 3465 [HLOS1_VOTE_LPASS_ADSP_GDSC] = &hlos1_vote_lpass_adsp_gdsc, 3466 [HLOS1_VOTE_LPASS_CORE_GDSC] = &hlos1_vote_lpass_core_gdsc, 3467 [USB30_GDSC] = &usb30_gdsc, 3468 [PCIE0_GDSC] = &pcie0_gdsc, 3469 [PCIE1_GDSC] = &pcie1_gdsc, 3470 [PCIE2_GDSC] = &pcie2_gdsc, 3471 [UFS_GDSC] = &ufs_gdsc, 3472 }; 3473 3474 static const struct qcom_reset_map gcc_msm8996_resets[] = { 3475 [GCC_SYSTEM_NOC_BCR] = { 0x4000 }, 3476 [GCC_CONFIG_NOC_BCR] = { 0x5000 }, 3477 [GCC_PERIPH_NOC_BCR] = { 0x6000 }, 3478 [GCC_IMEM_BCR] = { 0x8000 }, 3479 [GCC_MMSS_BCR] = { 0x9000 }, 3480 [GCC_PIMEM_BCR] = { 0x0a000 }, 3481 [GCC_QDSS_BCR] = { 0x0c000 }, 3482 [GCC_USB_30_BCR] = { 0x0f000 }, 3483 [GCC_USB_20_BCR] = { 0x12000 }, 3484 [GCC_QUSB2PHY_PRIM_BCR] = { 0x12038 }, 3485 [GCC_QUSB2PHY_SEC_BCR] = { 0x1203c }, 3486 [GCC_USB3_PHY_BCR] = { 0x50020 }, 3487 [GCC_USB3PHY_PHY_BCR] = { 0x50024 }, 3488 [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x6a000 }, 3489 [GCC_SDCC1_BCR] = { 0x13000 }, 3490 [GCC_SDCC2_BCR] = { 0x14000 }, 3491 [GCC_SDCC3_BCR] = { 0x15000 }, 3492 [GCC_SDCC4_BCR] = { 0x16000 }, 3493 [GCC_BLSP1_BCR] = { 0x17000 }, 3494 [GCC_BLSP1_QUP1_BCR] = { 0x19000 }, 3495 [GCC_BLSP1_UART1_BCR] = { 0x1a000 }, 3496 [GCC_BLSP1_QUP2_BCR] = { 0x1b000 }, 3497 [GCC_BLSP1_UART2_BCR] = { 0x1c000 }, 3498 [GCC_BLSP1_QUP3_BCR] = { 0x1d000 }, 3499 [GCC_BLSP1_UART3_BCR] = { 0x1e000 }, 3500 [GCC_BLSP1_QUP4_BCR] = { 0x1f000 }, 3501 [GCC_BLSP1_UART4_BCR] = { 0x20000 }, 3502 [GCC_BLSP1_QUP5_BCR] = { 0x21000 }, 3503 [GCC_BLSP1_UART5_BCR] = { 0x22000 }, 3504 [GCC_BLSP1_QUP6_BCR] = { 0x23000 }, 3505 [GCC_BLSP1_UART6_BCR] = { 0x24000 }, 3506 [GCC_BLSP2_BCR] = { 0x25000 }, 3507 [GCC_BLSP2_QUP1_BCR] = { 0x26000 }, 3508 [GCC_BLSP2_UART1_BCR] = { 0x27000 }, 3509 [GCC_BLSP2_QUP2_BCR] = { 0x28000 }, 3510 [GCC_BLSP2_UART2_BCR] = { 0x29000 }, 3511 [GCC_BLSP2_QUP3_BCR] = { 0x2a000 }, 3512 [GCC_BLSP2_UART3_BCR] = { 0x2b000 }, 3513 [GCC_BLSP2_QUP4_BCR] = { 0x2c000 }, 3514 [GCC_BLSP2_UART4_BCR] = { 0x2d000 }, 3515 [GCC_BLSP2_QUP5_BCR] = { 0x2e000 }, 3516 [GCC_BLSP2_UART5_BCR] = { 0x2f000 }, 3517 [GCC_BLSP2_QUP6_BCR] = { 0x30000 }, 3518 [GCC_BLSP2_UART6_BCR] = { 0x31000 }, 3519 [GCC_PDM_BCR] = { 0x33000 }, 3520 [GCC_PRNG_BCR] = { 0x34000 }, 3521 [GCC_TSIF_BCR] = { 0x36000 }, 3522 [GCC_TCSR_BCR] = { 0x37000 }, 3523 [GCC_BOOT_ROM_BCR] = { 0x38000 }, 3524 [GCC_MSG_RAM_BCR] = { 0x39000 }, 3525 [GCC_TLMM_BCR] = { 0x3a000 }, 3526 [GCC_MPM_BCR] = { 0x3b000 }, 3527 [GCC_SEC_CTRL_BCR] = { 0x3d000 }, 3528 [GCC_SPMI_BCR] = { 0x3f000 }, 3529 [GCC_SPDM_BCR] = { 0x40000 }, 3530 [GCC_CE1_BCR] = { 0x41000 }, 3531 [GCC_BIMC_BCR] = { 0x44000 }, 3532 [GCC_SNOC_BUS_TIMEOUT0_BCR] = { 0x49000 }, 3533 [GCC_SNOC_BUS_TIMEOUT2_BCR] = { 0x49008 }, 3534 [GCC_SNOC_BUS_TIMEOUT1_BCR] = { 0x49010 }, 3535 [GCC_SNOC_BUS_TIMEOUT3_BCR] = { 0x49018 }, 3536 [GCC_SNOC_BUS_TIMEOUT_EXTREF_BCR] = { 0x49020 }, 3537 [GCC_PNOC_BUS_TIMEOUT0_BCR] = { 0x4a000 }, 3538 [GCC_PNOC_BUS_TIMEOUT1_BCR] = { 0x4a008 }, 3539 [GCC_PNOC_BUS_TIMEOUT2_BCR] = { 0x4a010 }, 3540 [GCC_PNOC_BUS_TIMEOUT3_BCR] = { 0x4a018 }, 3541 [GCC_PNOC_BUS_TIMEOUT4_BCR] = { 0x4a020 }, 3542 [GCC_CNOC_BUS_TIMEOUT0_BCR] = { 0x4b000 }, 3543 [GCC_CNOC_BUS_TIMEOUT1_BCR] = { 0x4b008 }, 3544 [GCC_CNOC_BUS_TIMEOUT2_BCR] = { 0x4b010 }, 3545 [GCC_CNOC_BUS_TIMEOUT3_BCR] = { 0x4b018 }, 3546 [GCC_CNOC_BUS_TIMEOUT4_BCR] = { 0x4b020 }, 3547 [GCC_CNOC_BUS_TIMEOUT5_BCR] = { 0x4b028 }, 3548 [GCC_CNOC_BUS_TIMEOUT6_BCR] = { 0x4b030 }, 3549 [GCC_CNOC_BUS_TIMEOUT7_BCR] = { 0x4b038 }, 3550 [GCC_CNOC_BUS_TIMEOUT8_BCR] = { 0x80000 }, 3551 [GCC_CNOC_BUS_TIMEOUT9_BCR] = { 0x80008 }, 3552 [GCC_CNOC_BUS_TIMEOUT_EXTREF_BCR] = { 0x80010 }, 3553 [GCC_APB2JTAG_BCR] = { 0x4c000 }, 3554 [GCC_RBCPR_CX_BCR] = { 0x4e000 }, 3555 [GCC_RBCPR_MX_BCR] = { 0x4f000 }, 3556 [GCC_PCIE_0_BCR] = { 0x6b000 }, 3557 [GCC_PCIE_0_PHY_BCR] = { 0x6c01c }, 3558 [GCC_PCIE_1_BCR] = { 0x6d000 }, 3559 [GCC_PCIE_1_PHY_BCR] = { 0x6d038 }, 3560 [GCC_PCIE_2_BCR] = { 0x6e000 }, 3561 [GCC_PCIE_2_PHY_BCR] = { 0x6e038 }, 3562 [GCC_PCIE_PHY_BCR] = { 0x6f000 }, 3563 [GCC_PCIE_PHY_COM_BCR] = { 0x6f014 }, 3564 [GCC_PCIE_PHY_COM_NOCSR_BCR] = { 0x6f00c }, 3565 [GCC_DCD_BCR] = { 0x70000 }, 3566 [GCC_OBT_ODT_BCR] = { 0x73000 }, 3567 [GCC_UFS_BCR] = { 0x75000 }, 3568 [GCC_SSC_BCR] = { 0x63000 }, 3569 [GCC_VS_BCR] = { 0x7a000 }, 3570 [GCC_AGGRE0_NOC_BCR] = { 0x81000 }, 3571 [GCC_AGGRE1_NOC_BCR] = { 0x82000 }, 3572 [GCC_AGGRE2_NOC_BCR] = { 0x83000 }, 3573 [GCC_DCC_BCR] = { 0x84000 }, 3574 [GCC_IPA_BCR] = { 0x89000 }, 3575 [GCC_QSPI_BCR] = { 0x8b000 }, 3576 [GCC_SKL_BCR] = { 0x8c000 }, 3577 [GCC_MSMPU_BCR] = { 0x8d000 }, 3578 [GCC_MSS_Q6_BCR] = { 0x8e000 }, 3579 [GCC_QREFS_VBG_CAL_BCR] = { 0x88020 }, 3580 [GCC_MSS_RESTART] = { 0x8f008 }, 3581 }; 3582 3583 static const struct regmap_config gcc_msm8996_regmap_config = { 3584 .reg_bits = 32, 3585 .reg_stride = 4, 3586 .val_bits = 32, 3587 .max_register = 0x8f010, 3588 .fast_io = true, 3589 }; 3590 3591 static const struct qcom_cc_desc gcc_msm8996_desc = { 3592 .config = &gcc_msm8996_regmap_config, 3593 .clks = gcc_msm8996_clocks, 3594 .num_clks = ARRAY_SIZE(gcc_msm8996_clocks), 3595 .resets = gcc_msm8996_resets, 3596 .num_resets = ARRAY_SIZE(gcc_msm8996_resets), 3597 .gdscs = gcc_msm8996_gdscs, 3598 .num_gdscs = ARRAY_SIZE(gcc_msm8996_gdscs), 3599 .clk_hws = gcc_msm8996_hws, 3600 .num_clk_hws = ARRAY_SIZE(gcc_msm8996_hws), 3601 }; 3602 3603 static const struct of_device_id gcc_msm8996_match_table[] = { 3604 { .compatible = "qcom,gcc-msm8996" }, 3605 { } 3606 }; 3607 MODULE_DEVICE_TABLE(of, gcc_msm8996_match_table); 3608 3609 static int gcc_msm8996_probe(struct platform_device *pdev) 3610 { 3611 struct regmap *regmap; 3612 3613 regmap = qcom_cc_map(pdev, &gcc_msm8996_desc); 3614 if (IS_ERR(regmap)) 3615 return PTR_ERR(regmap); 3616 3617 /* 3618 * Set the HMSS_AHB_CLK_SLEEP_ENA bit to allow the hmss_ahb_clk to be 3619 * turned off by hardware during certain apps low power modes. 3620 */ 3621 regmap_update_bits(regmap, 0x52008, BIT(21), BIT(21)); 3622 3623 return qcom_cc_really_probe(&pdev->dev, &gcc_msm8996_desc, regmap); 3624 } 3625 3626 static struct platform_driver gcc_msm8996_driver = { 3627 .probe = gcc_msm8996_probe, 3628 .driver = { 3629 .name = "gcc-msm8996", 3630 .of_match_table = gcc_msm8996_match_table, 3631 }, 3632 }; 3633 3634 static int __init gcc_msm8996_init(void) 3635 { 3636 return platform_driver_register(&gcc_msm8996_driver); 3637 } 3638 core_initcall(gcc_msm8996_init); 3639 3640 static void __exit gcc_msm8996_exit(void) 3641 { 3642 platform_driver_unregister(&gcc_msm8996_driver); 3643 } 3644 module_exit(gcc_msm8996_exit); 3645 3646 MODULE_DESCRIPTION("QCOM GCC MSM8996 Driver"); 3647 MODULE_LICENSE("GPL v2"); 3648 MODULE_ALIAS("platform:gcc-msm8996"); 3649