1 // SPDX-License-Identifier: GPL-2.0-only 2 // Copyright (c) 2021, The Linux Foundation. All rights reserved. 3 4 #include <linux/kernel.h> 5 #include <linux/bitops.h> 6 #include <linux/err.h> 7 #include <linux/module.h> 8 #include <linux/platform_device.h> 9 #include <linux/of.h> 10 #include <linux/of_device.h> 11 #include <linux/clk-provider.h> 12 #include <linux/regmap.h> 13 #include <linux/reset-controller.h> 14 15 #include <dt-bindings/clock/qcom,gcc-msm8953.h> 16 17 #include "clk-alpha-pll.h" 18 #include "clk-branch.h" 19 #include "clk-rcg.h" 20 #include "common.h" 21 #include "gdsc.h" 22 #include "reset.h" 23 24 enum { 25 P_XO, 26 P_SLEEP_CLK, 27 P_GPLL0, 28 P_GPLL0_DIV2, 29 P_GPLL2, 30 P_GPLL3, 31 P_GPLL4, 32 P_GPLL6, 33 P_GPLL6_DIV2, 34 P_DSI0PLL, 35 P_DSI0PLL_BYTE, 36 P_DSI1PLL, 37 P_DSI1PLL_BYTE, 38 }; 39 40 static struct clk_alpha_pll gpll0_early = { 41 .offset = 0x21000, 42 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 43 .clkr = { 44 .enable_reg = 0x45000, 45 .enable_mask = BIT(0), 46 .hw.init = &(struct clk_init_data) { 47 .name = "gpll0_early", 48 .parent_data = &(const struct clk_parent_data) { 49 .fw_name = "xo", 50 }, 51 .num_parents = 1, 52 .ops = &clk_alpha_pll_fixed_ops, 53 }, 54 }, 55 }; 56 57 static struct clk_fixed_factor gpll0_early_div = { 58 .mult = 1, 59 .div = 2, 60 .hw.init = &(struct clk_init_data){ 61 .name = "gpll0_early_div", 62 .parent_hws = (const struct clk_hw*[]){ 63 &gpll0_early.clkr.hw, 64 }, 65 .num_parents = 1, 66 .ops = &clk_fixed_factor_ops, 67 }, 68 }; 69 70 static struct clk_alpha_pll_postdiv gpll0 = { 71 .offset = 0x21000, 72 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 73 .clkr.hw.init = &(struct clk_init_data){ 74 .name = "gpll0", 75 .parent_hws = (const struct clk_hw*[]){ 76 &gpll0_early.clkr.hw, 77 }, 78 .num_parents = 1, 79 .ops = &clk_alpha_pll_postdiv_ro_ops, 80 }, 81 }; 82 83 static struct clk_alpha_pll gpll2_early = { 84 .offset = 0x4a000, 85 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 86 .clkr = { 87 .enable_reg = 0x45000, 88 .enable_mask = BIT(2), 89 .hw.init = &(struct clk_init_data){ 90 .name = "gpll2_early", 91 .parent_data = &(const struct clk_parent_data) { 92 .fw_name = "xo", 93 }, 94 .num_parents = 1, 95 .ops = &clk_alpha_pll_fixed_ops, 96 }, 97 }, 98 }; 99 100 static struct clk_alpha_pll_postdiv gpll2 = { 101 .offset = 0x4a000, 102 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 103 .clkr.hw.init = &(struct clk_init_data){ 104 .name = "gpll2", 105 .parent_hws = (const struct clk_hw*[]){ 106 &gpll2_early.clkr.hw, 107 }, 108 .num_parents = 1, 109 .ops = &clk_alpha_pll_postdiv_ro_ops, 110 }, 111 }; 112 113 static const struct pll_vco gpll3_p_vco[] = { 114 { 1000000000, 2000000000, 0 }, 115 }; 116 117 static const struct alpha_pll_config gpll3_early_config = { 118 .l = 63, 119 .config_ctl_val = 0x4001055b, 120 .early_output_mask = 0, 121 .post_div_mask = GENMASK(11, 8), 122 .post_div_val = BIT(8), 123 }; 124 125 static struct clk_alpha_pll gpll3_early = { 126 .offset = 0x22000, 127 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 128 .vco_table = gpll3_p_vco, 129 .num_vco = ARRAY_SIZE(gpll3_p_vco), 130 .flags = SUPPORTS_DYNAMIC_UPDATE, 131 .clkr = { 132 .hw.init = &(struct clk_init_data){ 133 .name = "gpll3_early", 134 .parent_data = &(const struct clk_parent_data) { 135 .fw_name = "xo", 136 }, 137 .num_parents = 1, 138 .ops = &clk_alpha_pll_ops, 139 }, 140 }, 141 }; 142 143 static struct clk_alpha_pll_postdiv gpll3 = { 144 .offset = 0x22000, 145 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 146 .clkr.hw.init = &(struct clk_init_data){ 147 .name = "gpll3", 148 .parent_hws = (const struct clk_hw*[]){ 149 &gpll3_early.clkr.hw, 150 }, 151 .num_parents = 1, 152 .ops = &clk_alpha_pll_postdiv_ops, 153 .flags = CLK_SET_RATE_PARENT, 154 }, 155 }; 156 157 static struct clk_alpha_pll gpll4_early = { 158 .offset = 0x24000, 159 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 160 .clkr = { 161 .enable_reg = 0x45000, 162 .enable_mask = BIT(5), 163 .hw.init = &(struct clk_init_data){ 164 .name = "gpll4_early", 165 .parent_data = &(const struct clk_parent_data) { 166 .fw_name = "xo", 167 }, 168 .num_parents = 1, 169 .ops = &clk_alpha_pll_fixed_ops, 170 }, 171 }, 172 }; 173 174 static struct clk_alpha_pll_postdiv gpll4 = { 175 .offset = 0x24000, 176 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 177 .clkr.hw.init = &(struct clk_init_data){ 178 .name = "gpll4", 179 .parent_hws = (const struct clk_hw*[]){ 180 &gpll4_early.clkr.hw, 181 }, 182 .num_parents = 1, 183 .ops = &clk_alpha_pll_postdiv_ro_ops, 184 }, 185 }; 186 187 static struct clk_alpha_pll gpll6_early = { 188 .offset = 0x37000, 189 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 190 .clkr = { 191 .enable_reg = 0x45000, 192 .enable_mask = BIT(7), 193 .hw.init = &(struct clk_init_data){ 194 .name = "gpll6_early", 195 .parent_data = &(const struct clk_parent_data) { 196 .fw_name = "xo", 197 }, 198 .num_parents = 1, 199 .ops = &clk_alpha_pll_fixed_ops, 200 }, 201 }, 202 }; 203 204 static struct clk_fixed_factor gpll6_early_div = { 205 .mult = 1, 206 .div = 2, 207 .hw.init = &(struct clk_init_data){ 208 .name = "gpll6_early_div", 209 .parent_hws = (const struct clk_hw*[]){ 210 &gpll6_early.clkr.hw, 211 }, 212 .num_parents = 1, 213 .ops = &clk_fixed_factor_ops, 214 }, 215 }; 216 217 static struct clk_alpha_pll_postdiv gpll6 = { 218 .offset = 0x37000, 219 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 220 .clkr.hw.init = &(struct clk_init_data){ 221 .name = "gpll6", 222 .parent_hws = (const struct clk_hw*[]){ 223 &gpll6_early.clkr.hw, 224 }, 225 .num_parents = 1, 226 .ops = &clk_alpha_pll_postdiv_ro_ops, 227 }, 228 }; 229 230 static const struct parent_map gcc_xo_gpll0_gpll0div2_2_map[] = { 231 { P_XO, 0 }, 232 { P_GPLL0, 1 }, 233 { P_GPLL0_DIV2, 2 }, 234 }; 235 236 static const struct parent_map gcc_xo_gpll0_gpll0div2_4_map[] = { 237 { P_XO, 0 }, 238 { P_GPLL0, 1 }, 239 { P_GPLL0_DIV2, 4 }, 240 }; 241 242 static const struct clk_parent_data gcc_xo_gpll0_gpll0div2_data[] = { 243 { .fw_name = "xo" }, 244 { .hw = &gpll0.clkr.hw }, 245 { .hw = &gpll0_early_div.hw }, 246 }; 247 248 static const struct parent_map gcc_apc_droop_detector_map[] = { 249 { P_XO, 0 }, 250 { P_GPLL0, 1 }, 251 { P_GPLL4, 2 }, 252 }; 253 254 static const struct clk_parent_data gcc_apc_droop_detector_data[] = { 255 { .fw_name = "xo" }, 256 { .hw = &gpll0.clkr.hw }, 257 { .hw = &gpll4.clkr.hw }, 258 }; 259 260 static const struct freq_tbl ftbl_apc_droop_detector_clk_src[] = { 261 F(19200000, P_XO, 1, 0, 0), 262 F(400000000, P_GPLL0, 2, 0, 0), 263 F(576000000, P_GPLL4, 2, 0, 0), 264 { } 265 }; 266 267 static struct clk_rcg2 apc0_droop_detector_clk_src = { 268 .cmd_rcgr = 0x78008, 269 .hid_width = 5, 270 .freq_tbl = ftbl_apc_droop_detector_clk_src, 271 .parent_map = gcc_apc_droop_detector_map, 272 .clkr.hw.init = &(struct clk_init_data) { 273 .name = "apc0_droop_detector_clk_src", 274 .parent_data = gcc_apc_droop_detector_data, 275 .num_parents = ARRAY_SIZE(gcc_apc_droop_detector_data), 276 .ops = &clk_rcg2_ops, 277 } 278 }; 279 static struct clk_rcg2 apc1_droop_detector_clk_src = { 280 .cmd_rcgr = 0x79008, 281 .hid_width = 5, 282 .freq_tbl = ftbl_apc_droop_detector_clk_src, 283 .parent_map = gcc_apc_droop_detector_map, 284 .clkr.hw.init = &(struct clk_init_data) { 285 .name = "apc1_droop_detector_clk_src", 286 .parent_data = gcc_apc_droop_detector_data, 287 .num_parents = ARRAY_SIZE(gcc_apc_droop_detector_data), 288 .ops = &clk_rcg2_ops, 289 } 290 }; 291 292 static const struct freq_tbl ftbl_apss_ahb_clk_src[] = { 293 F(19200000, P_XO, 1, 0, 0), 294 F(25000000, P_GPLL0_DIV2, 16, 0, 0), 295 F(50000000, P_GPLL0, 16, 0, 0), 296 F(100000000, P_GPLL0, 8, 0, 0), 297 F(133330000, P_GPLL0, 6, 0, 0), 298 { } 299 }; 300 301 static struct clk_rcg2 apss_ahb_clk_src = { 302 .cmd_rcgr = 0x46000, 303 .hid_width = 5, 304 .freq_tbl = ftbl_apss_ahb_clk_src, 305 .parent_map = gcc_xo_gpll0_gpll0div2_4_map, 306 .clkr.hw.init = &(struct clk_init_data) { 307 .name = "apss_ahb_clk_src", 308 .parent_data = gcc_xo_gpll0_gpll0div2_data, 309 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 310 .ops = &clk_rcg2_ops, 311 } 312 }; 313 314 static const struct freq_tbl ftbl_blsp_i2c_apps_clk_src[] = { 315 F(19200000, P_XO, 1, 0, 0), 316 F(25000000, P_GPLL0_DIV2, 16, 0, 0), 317 F(50000000, P_GPLL0, 16, 0, 0), 318 { } 319 }; 320 321 static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = { 322 .cmd_rcgr = 0x0200c, 323 .hid_width = 5, 324 .freq_tbl = ftbl_blsp_i2c_apps_clk_src, 325 .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 326 .clkr.hw.init = &(struct clk_init_data) { 327 .name = "blsp1_qup1_i2c_apps_clk_src", 328 .parent_data = gcc_xo_gpll0_gpll0div2_data, 329 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 330 .ops = &clk_rcg2_ops, 331 } 332 }; 333 334 static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = { 335 .cmd_rcgr = 0x03000, 336 .hid_width = 5, 337 .freq_tbl = ftbl_blsp_i2c_apps_clk_src, 338 .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 339 .clkr.hw.init = &(struct clk_init_data) { 340 .name = "blsp1_qup2_i2c_apps_clk_src", 341 .parent_data = gcc_xo_gpll0_gpll0div2_data, 342 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 343 .ops = &clk_rcg2_ops, 344 } 345 }; 346 347 static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = { 348 .cmd_rcgr = 0x04000, 349 .hid_width = 5, 350 .freq_tbl = ftbl_blsp_i2c_apps_clk_src, 351 .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 352 .clkr.hw.init = &(struct clk_init_data) { 353 .name = "blsp1_qup3_i2c_apps_clk_src", 354 .parent_data = gcc_xo_gpll0_gpll0div2_data, 355 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 356 .ops = &clk_rcg2_ops, 357 } 358 }; 359 360 static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = { 361 .cmd_rcgr = 0x05000, 362 .hid_width = 5, 363 .freq_tbl = ftbl_blsp_i2c_apps_clk_src, 364 .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 365 .clkr.hw.init = &(struct clk_init_data) { 366 .name = "blsp1_qup4_i2c_apps_clk_src", 367 .parent_data = gcc_xo_gpll0_gpll0div2_data, 368 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 369 .ops = &clk_rcg2_ops, 370 } 371 }; 372 373 static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = { 374 .cmd_rcgr = 0x0c00c, 375 .hid_width = 5, 376 .freq_tbl = ftbl_blsp_i2c_apps_clk_src, 377 .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 378 .clkr.hw.init = &(struct clk_init_data) { 379 .name = "blsp2_qup1_i2c_apps_clk_src", 380 .parent_data = gcc_xo_gpll0_gpll0div2_data, 381 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 382 .ops = &clk_rcg2_ops, 383 } 384 }; 385 386 static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = { 387 .cmd_rcgr = 0x0d000, 388 .hid_width = 5, 389 .freq_tbl = ftbl_blsp_i2c_apps_clk_src, 390 .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 391 .clkr.hw.init = &(struct clk_init_data) { 392 .name = "blsp2_qup2_i2c_apps_clk_src", 393 .parent_data = gcc_xo_gpll0_gpll0div2_data, 394 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 395 .ops = &clk_rcg2_ops, 396 } 397 }; 398 399 static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = { 400 .cmd_rcgr = 0x0f000, 401 .hid_width = 5, 402 .freq_tbl = ftbl_blsp_i2c_apps_clk_src, 403 .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 404 .clkr.hw.init = &(struct clk_init_data) { 405 .name = "blsp2_qup3_i2c_apps_clk_src", 406 .parent_data = gcc_xo_gpll0_gpll0div2_data, 407 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 408 .ops = &clk_rcg2_ops, 409 } 410 }; 411 412 static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = { 413 .cmd_rcgr = 0x18000, 414 .hid_width = 5, 415 .freq_tbl = ftbl_blsp_i2c_apps_clk_src, 416 .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 417 .clkr.hw.init = &(struct clk_init_data) { 418 .name = "blsp2_qup4_i2c_apps_clk_src", 419 .parent_data = gcc_xo_gpll0_gpll0div2_data, 420 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 421 .ops = &clk_rcg2_ops, 422 } 423 }; 424 425 static const struct freq_tbl ftbl_blsp_spi_apps_clk_src[] = { 426 F(960000, P_XO, 10, 1, 2), 427 F(4800000, P_XO, 4, 0, 0), 428 F(9600000, P_XO, 2, 0, 0), 429 F(12500000, P_GPLL0_DIV2, 16, 1, 2), 430 F(16000000, P_GPLL0, 10, 1, 5), 431 F(19200000, P_XO, 1, 0, 0), 432 F(25000000, P_GPLL0, 16, 1, 2), 433 F(50000000, P_GPLL0, 16, 0, 0), 434 { } 435 }; 436 437 static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = { 438 .cmd_rcgr = 0x02024, 439 .hid_width = 5, 440 .mnd_width = 8, 441 .freq_tbl = ftbl_blsp_spi_apps_clk_src, 442 .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 443 .clkr.hw.init = &(struct clk_init_data) { 444 .name = "blsp1_qup1_spi_apps_clk_src", 445 .parent_data = gcc_xo_gpll0_gpll0div2_data, 446 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 447 .ops = &clk_rcg2_ops, 448 } 449 }; 450 451 static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = { 452 .cmd_rcgr = 0x03014, 453 .hid_width = 5, 454 .mnd_width = 8, 455 .freq_tbl = ftbl_blsp_spi_apps_clk_src, 456 .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 457 .clkr.hw.init = &(struct clk_init_data) { 458 .name = "blsp1_qup2_spi_apps_clk_src", 459 .parent_data = gcc_xo_gpll0_gpll0div2_data, 460 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 461 .ops = &clk_rcg2_ops, 462 } 463 }; 464 465 static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = { 466 .cmd_rcgr = 0x04024, 467 .hid_width = 5, 468 .mnd_width = 8, 469 .freq_tbl = ftbl_blsp_spi_apps_clk_src, 470 .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 471 .clkr.hw.init = &(struct clk_init_data) { 472 .name = "blsp1_qup3_spi_apps_clk_src", 473 .parent_data = gcc_xo_gpll0_gpll0div2_data, 474 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 475 .ops = &clk_rcg2_ops, 476 } 477 }; 478 479 static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = { 480 .cmd_rcgr = 0x05024, 481 .hid_width = 5, 482 .mnd_width = 8, 483 .freq_tbl = ftbl_blsp_spi_apps_clk_src, 484 .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 485 .clkr.hw.init = &(struct clk_init_data) { 486 .name = "blsp1_qup4_spi_apps_clk_src", 487 .parent_data = gcc_xo_gpll0_gpll0div2_data, 488 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 489 .ops = &clk_rcg2_ops, 490 } 491 }; 492 493 static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = { 494 .cmd_rcgr = 0x0c024, 495 .hid_width = 5, 496 .mnd_width = 8, 497 .freq_tbl = ftbl_blsp_spi_apps_clk_src, 498 .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 499 .clkr.hw.init = &(struct clk_init_data) { 500 .name = "blsp2_qup1_spi_apps_clk_src", 501 .parent_data = gcc_xo_gpll0_gpll0div2_data, 502 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 503 .ops = &clk_rcg2_ops, 504 } 505 }; 506 507 static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = { 508 .cmd_rcgr = 0x0d014, 509 .hid_width = 5, 510 .mnd_width = 8, 511 .freq_tbl = ftbl_blsp_spi_apps_clk_src, 512 .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 513 .clkr.hw.init = &(struct clk_init_data) { 514 .name = "blsp2_qup2_spi_apps_clk_src", 515 .parent_data = gcc_xo_gpll0_gpll0div2_data, 516 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 517 .ops = &clk_rcg2_ops, 518 } 519 }; 520 521 static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = { 522 .cmd_rcgr = 0x0f024, 523 .hid_width = 5, 524 .mnd_width = 8, 525 .freq_tbl = ftbl_blsp_spi_apps_clk_src, 526 .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 527 .clkr.hw.init = &(struct clk_init_data) { 528 .name = "blsp2_qup3_spi_apps_clk_src", 529 .parent_data = gcc_xo_gpll0_gpll0div2_data, 530 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 531 .ops = &clk_rcg2_ops, 532 } 533 }; 534 535 static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = { 536 .cmd_rcgr = 0x18024, 537 .hid_width = 5, 538 .mnd_width = 8, 539 .freq_tbl = ftbl_blsp_spi_apps_clk_src, 540 .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 541 .clkr.hw.init = &(struct clk_init_data) { 542 .name = "blsp2_qup4_spi_apps_clk_src", 543 .parent_data = gcc_xo_gpll0_gpll0div2_data, 544 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 545 .ops = &clk_rcg2_ops, 546 } 547 }; 548 549 static const struct freq_tbl ftbl_blsp_uart_apps_clk_src[] = { 550 F(3686400, P_GPLL0_DIV2, 1, 144, 15625), 551 F(7372800, P_GPLL0_DIV2, 1, 288, 15625), 552 F(14745600, P_GPLL0_DIV2, 1, 576, 15625), 553 F(16000000, P_GPLL0_DIV2, 5, 1, 5), 554 F(19200000, P_XO, 1, 0, 0), 555 F(24000000, P_GPLL0, 1, 3, 100), 556 F(25000000, P_GPLL0, 16, 1, 2), 557 F(32000000, P_GPLL0, 1, 1, 25), 558 F(40000000, P_GPLL0, 1, 1, 20), 559 F(46400000, P_GPLL0, 1, 29, 500), 560 F(48000000, P_GPLL0, 1, 3, 50), 561 F(51200000, P_GPLL0, 1, 8, 125), 562 F(56000000, P_GPLL0, 1, 7, 100), 563 F(58982400, P_GPLL0, 1, 1152, 15625), 564 F(60000000, P_GPLL0, 1, 3, 40), 565 F(64000000, P_GPLL0, 1, 2, 25), 566 { } 567 }; 568 569 static struct clk_rcg2 blsp1_uart1_apps_clk_src = { 570 .cmd_rcgr = 0x02044, 571 .hid_width = 5, 572 .mnd_width = 16, 573 .freq_tbl = ftbl_blsp_uart_apps_clk_src, 574 .parent_map = gcc_xo_gpll0_gpll0div2_4_map, 575 .clkr.hw.init = &(struct clk_init_data) { 576 .name = "blsp1_uart1_apps_clk_src", 577 .parent_data = gcc_xo_gpll0_gpll0div2_data, 578 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 579 .ops = &clk_rcg2_ops, 580 } 581 }; 582 583 static struct clk_rcg2 blsp1_uart2_apps_clk_src = { 584 .cmd_rcgr = 0x03034, 585 .hid_width = 5, 586 .mnd_width = 16, 587 .freq_tbl = ftbl_blsp_uart_apps_clk_src, 588 .parent_map = gcc_xo_gpll0_gpll0div2_4_map, 589 .clkr.hw.init = &(struct clk_init_data) { 590 .name = "blsp1_uart2_apps_clk_src", 591 .parent_data = gcc_xo_gpll0_gpll0div2_data, 592 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 593 .ops = &clk_rcg2_ops, 594 } 595 }; 596 597 static struct clk_rcg2 blsp2_uart1_apps_clk_src = { 598 .cmd_rcgr = 0x0c044, 599 .hid_width = 5, 600 .mnd_width = 16, 601 .freq_tbl = ftbl_blsp_uart_apps_clk_src, 602 .parent_map = gcc_xo_gpll0_gpll0div2_4_map, 603 .clkr.hw.init = &(struct clk_init_data) { 604 .name = "blsp2_uart1_apps_clk_src", 605 .parent_data = gcc_xo_gpll0_gpll0div2_data, 606 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 607 .ops = &clk_rcg2_ops, 608 } 609 }; 610 611 static struct clk_rcg2 blsp2_uart2_apps_clk_src = { 612 .cmd_rcgr = 0x0d034, 613 .hid_width = 5, 614 .mnd_width = 16, 615 .freq_tbl = ftbl_blsp_uart_apps_clk_src, 616 .parent_map = gcc_xo_gpll0_gpll0div2_4_map, 617 .clkr.hw.init = &(struct clk_init_data) { 618 .name = "blsp2_uart2_apps_clk_src", 619 .parent_data = gcc_xo_gpll0_gpll0div2_data, 620 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 621 .ops = &clk_rcg2_ops, 622 } 623 }; 624 625 static const struct parent_map gcc_byte0_map[] = { 626 { P_XO, 0 }, 627 { P_DSI0PLL_BYTE, 1 }, 628 { P_DSI1PLL_BYTE, 3 }, 629 }; 630 631 static const struct parent_map gcc_byte1_map[] = { 632 { P_XO, 0 }, 633 { P_DSI0PLL_BYTE, 3 }, 634 { P_DSI1PLL_BYTE, 1 }, 635 }; 636 637 static const struct clk_parent_data gcc_byte_data[] = { 638 { .fw_name = "xo" }, 639 { .fw_name = "dsi0pllbyte", .name = "dsi0pllbyte" }, 640 { .fw_name = "dsi1pllbyte", .name = "dsi1pllbyte" }, 641 }; 642 643 static struct clk_rcg2 byte0_clk_src = { 644 .cmd_rcgr = 0x4d044, 645 .hid_width = 5, 646 .parent_map = gcc_byte0_map, 647 .clkr.hw.init = &(struct clk_init_data) { 648 .name = "byte0_clk_src", 649 .parent_data = gcc_byte_data, 650 .num_parents = ARRAY_SIZE(gcc_byte_data), 651 .ops = &clk_byte2_ops, 652 .flags = CLK_SET_RATE_PARENT, 653 } 654 }; 655 656 static struct clk_rcg2 byte1_clk_src = { 657 .cmd_rcgr = 0x4d0b0, 658 .hid_width = 5, 659 .parent_map = gcc_byte1_map, 660 .clkr.hw.init = &(struct clk_init_data) { 661 .name = "byte1_clk_src", 662 .parent_data = gcc_byte_data, 663 .num_parents = ARRAY_SIZE(gcc_byte_data), 664 .ops = &clk_byte2_ops, 665 .flags = CLK_SET_RATE_PARENT, 666 } 667 }; 668 669 static const struct parent_map gcc_gp_map[] = { 670 { P_XO, 0 }, 671 { P_GPLL0, 1 }, 672 { P_GPLL6, 2 }, 673 { P_GPLL0_DIV2, 4 }, 674 { P_SLEEP_CLK, 6 }, 675 }; 676 677 static const struct clk_parent_data gcc_gp_data[] = { 678 { .fw_name = "xo" }, 679 { .hw = &gpll0.clkr.hw }, 680 { .hw = &gpll6.clkr.hw }, 681 { .hw = &gpll0_early_div.hw }, 682 { .fw_name = "sleep", .name = "sleep" }, 683 }; 684 685 static const struct freq_tbl ftbl_camss_gp_clk_src[] = { 686 F(50000000, P_GPLL0_DIV2, 8, 0, 0), 687 F(100000000, P_GPLL0, 8, 0, 0), 688 F(200000000, P_GPLL0, 4, 0, 0), 689 F(266670000, P_GPLL0, 3, 0, 0), 690 { } 691 }; 692 693 static struct clk_rcg2 camss_gp0_clk_src = { 694 .cmd_rcgr = 0x54000, 695 .hid_width = 5, 696 .mnd_width = 8, 697 .freq_tbl = ftbl_camss_gp_clk_src, 698 .parent_map = gcc_gp_map, 699 .clkr.hw.init = &(struct clk_init_data) { 700 .name = "camss_gp0_clk_src", 701 .parent_data = gcc_gp_data, 702 .num_parents = ARRAY_SIZE(gcc_gp_data), 703 .ops = &clk_rcg2_ops, 704 } 705 }; 706 707 static struct clk_rcg2 camss_gp1_clk_src = { 708 .cmd_rcgr = 0x55000, 709 .hid_width = 5, 710 .mnd_width = 8, 711 .freq_tbl = ftbl_camss_gp_clk_src, 712 .parent_map = gcc_gp_map, 713 .clkr.hw.init = &(struct clk_init_data) { 714 .name = "camss_gp1_clk_src", 715 .parent_data = gcc_gp_data, 716 .num_parents = ARRAY_SIZE(gcc_gp_data), 717 .ops = &clk_rcg2_ops, 718 } 719 }; 720 721 static const struct freq_tbl ftbl_camss_top_ahb_clk_src[] = { 722 F(40000000, P_GPLL0_DIV2, 10, 0, 0), 723 F(80000000, P_GPLL0, 10, 0, 0), 724 { } 725 }; 726 727 static struct clk_rcg2 camss_top_ahb_clk_src = { 728 .cmd_rcgr = 0x5a000, 729 .hid_width = 5, 730 .freq_tbl = ftbl_camss_top_ahb_clk_src, 731 .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 732 .clkr.hw.init = &(struct clk_init_data) { 733 .name = "camss_top_ahb_clk_src", 734 .parent_data = gcc_xo_gpll0_gpll0div2_data, 735 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 736 .ops = &clk_rcg2_ops, 737 } 738 }; 739 740 static const struct parent_map gcc_cci_map[] = { 741 { P_XO, 0 }, 742 { P_GPLL0, 2 }, 743 { P_GPLL0_DIV2, 3 }, 744 { P_SLEEP_CLK, 6 }, 745 }; 746 747 static const struct clk_parent_data gcc_cci_data[] = { 748 { .fw_name = "xo" }, 749 { .hw = &gpll0.clkr.hw }, 750 { .hw = &gpll0_early_div.hw }, 751 { .fw_name = "sleep", .name = "sleep" }, 752 }; 753 754 static const struct freq_tbl ftbl_cci_clk_src[] = { 755 F(19200000, P_XO, 1, 0, 0), 756 F(37500000, P_GPLL0_DIV2, 1, 3, 32), 757 { } 758 }; 759 760 static struct clk_rcg2 cci_clk_src = { 761 .cmd_rcgr = 0x51000, 762 .hid_width = 5, 763 .mnd_width = 8, 764 .freq_tbl = ftbl_cci_clk_src, 765 .parent_map = gcc_cci_map, 766 .clkr.hw.init = &(struct clk_init_data) { 767 .name = "cci_clk_src", 768 .parent_data = gcc_cci_data, 769 .num_parents = ARRAY_SIZE(gcc_cci_data), 770 .ops = &clk_rcg2_ops, 771 } 772 }; 773 774 static const struct parent_map gcc_cpp_map[] = { 775 { P_XO, 0 }, 776 { P_GPLL0, 1 }, 777 { P_GPLL6, 3 }, 778 { P_GPLL2, 4 }, 779 { P_GPLL0_DIV2, 5 }, 780 }; 781 782 static const struct clk_parent_data gcc_cpp_data[] = { 783 { .fw_name = "xo" }, 784 { .hw = &gpll0.clkr.hw }, 785 { .hw = &gpll6.clkr.hw }, 786 { .hw = &gpll2.clkr.hw }, 787 { .hw = &gpll0_early_div.hw }, 788 }; 789 790 static const struct freq_tbl ftbl_cpp_clk_src[] = { 791 F(100000000, P_GPLL0_DIV2, 4, 0, 0), 792 F(200000000, P_GPLL0, 4, 0, 0), 793 F(266670000, P_GPLL0, 3, 0, 0), 794 F(320000000, P_GPLL0, 2.5, 0, 0), 795 F(400000000, P_GPLL0, 2, 0, 0), 796 F(465000000, P_GPLL2, 2, 0, 0), 797 { } 798 }; 799 800 static struct clk_rcg2 cpp_clk_src = { 801 .cmd_rcgr = 0x58018, 802 .hid_width = 5, 803 .freq_tbl = ftbl_cpp_clk_src, 804 .parent_map = gcc_cpp_map, 805 .clkr.hw.init = &(struct clk_init_data) { 806 .name = "cpp_clk_src", 807 .parent_data = gcc_cpp_data, 808 .num_parents = ARRAY_SIZE(gcc_cpp_data), 809 .ops = &clk_rcg2_ops, 810 } 811 }; 812 813 static const struct freq_tbl ftbl_crypto_clk_src[] = { 814 F(40000000, P_GPLL0_DIV2, 10, 0, 0), 815 F(80000000, P_GPLL0, 10, 0, 0), 816 F(100000000, P_GPLL0, 8, 0, 0), 817 F(160000000, P_GPLL0, 5, 0, 0), 818 { } 819 }; 820 821 static struct clk_rcg2 crypto_clk_src = { 822 .cmd_rcgr = 0x16004, 823 .hid_width = 5, 824 .freq_tbl = ftbl_crypto_clk_src, 825 .parent_map = gcc_xo_gpll0_gpll0div2_4_map, 826 .clkr.hw.init = &(struct clk_init_data) { 827 .name = "crypto_clk_src", 828 .parent_data = gcc_xo_gpll0_gpll0div2_data, 829 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 830 .ops = &clk_rcg2_ops, 831 } 832 }; 833 834 static const struct parent_map gcc_csi0_map[] = { 835 { P_XO, 0 }, 836 { P_GPLL0, 1 }, 837 { P_GPLL2, 4 }, 838 { P_GPLL0_DIV2, 5 }, 839 }; 840 841 static const struct parent_map gcc_csi12_map[] = { 842 { P_XO, 0 }, 843 { P_GPLL0, 1 }, 844 { P_GPLL2, 5 }, 845 { P_GPLL0_DIV2, 4 }, 846 }; 847 848 static const struct clk_parent_data gcc_csi_data[] = { 849 { .fw_name = "xo" }, 850 { .hw = &gpll0.clkr.hw }, 851 { .hw = &gpll2.clkr.hw }, 852 { .hw = &gpll0_early_div.hw }, 853 }; 854 855 static const struct freq_tbl ftbl_csi_clk_src[] = { 856 F(100000000, P_GPLL0_DIV2, 4, 0, 0), 857 F(200000000, P_GPLL0, 4, 0, 0), 858 F(310000000, P_GPLL2, 3, 0, 0), 859 F(400000000, P_GPLL0, 2, 0, 0), 860 F(465000000, P_GPLL2, 2, 0, 0), 861 { } 862 }; 863 864 static struct clk_rcg2 csi0_clk_src = { 865 .cmd_rcgr = 0x4e020, 866 .hid_width = 5, 867 .freq_tbl = ftbl_csi_clk_src, 868 .parent_map = gcc_csi0_map, 869 .clkr.hw.init = &(struct clk_init_data) { 870 .name = "csi0_clk_src", 871 .parent_data = gcc_csi_data, 872 .num_parents = ARRAY_SIZE(gcc_csi_data), 873 .ops = &clk_rcg2_ops, 874 } 875 }; 876 877 static struct clk_rcg2 csi1_clk_src = { 878 .cmd_rcgr = 0x4f020, 879 .hid_width = 5, 880 .freq_tbl = ftbl_csi_clk_src, 881 .parent_map = gcc_csi12_map, 882 .clkr.hw.init = &(struct clk_init_data) { 883 .name = "csi1_clk_src", 884 .parent_data = gcc_csi_data, 885 .num_parents = ARRAY_SIZE(gcc_csi_data), 886 .ops = &clk_rcg2_ops, 887 } 888 }; 889 890 static struct clk_rcg2 csi2_clk_src = { 891 .cmd_rcgr = 0x3c020, 892 .hid_width = 5, 893 .freq_tbl = ftbl_csi_clk_src, 894 .parent_map = gcc_csi12_map, 895 .clkr.hw.init = &(struct clk_init_data) { 896 .name = "csi2_clk_src", 897 .parent_data = gcc_csi_data, 898 .num_parents = ARRAY_SIZE(gcc_csi_data), 899 .ops = &clk_rcg2_ops, 900 } 901 }; 902 903 static const struct parent_map gcc_csip_map[] = { 904 { P_XO, 0 }, 905 { P_GPLL0, 1 }, 906 { P_GPLL4, 3 }, 907 { P_GPLL2, 4 }, 908 { P_GPLL0_DIV2, 5 }, 909 }; 910 911 static const struct clk_parent_data gcc_csip_data[] = { 912 { .fw_name = "xo" }, 913 { .hw = &gpll0.clkr.hw }, 914 { .hw = &gpll4.clkr.hw }, 915 { .hw = &gpll2.clkr.hw }, 916 { .hw = &gpll0_early_div.hw }, 917 }; 918 919 static const struct freq_tbl ftbl_csi_p_clk_src[] = { 920 F(66670000, P_GPLL0_DIV2, 6, 0, 0), 921 F(133330000, P_GPLL0, 6, 0, 0), 922 F(200000000, P_GPLL0, 4, 0, 0), 923 F(266670000, P_GPLL0, 3, 0, 0), 924 F(310000000, P_GPLL2, 3, 0, 0), 925 { } 926 }; 927 928 static struct clk_rcg2 csi0p_clk_src = { 929 .cmd_rcgr = 0x58084, 930 .hid_width = 5, 931 .freq_tbl = ftbl_csi_p_clk_src, 932 .parent_map = gcc_csip_map, 933 .clkr.hw.init = &(struct clk_init_data) { 934 .name = "csi0p_clk_src", 935 .parent_data = gcc_csip_data, 936 .num_parents = ARRAY_SIZE(gcc_csip_data), 937 .ops = &clk_rcg2_ops, 938 } 939 }; 940 941 static struct clk_rcg2 csi1p_clk_src = { 942 .cmd_rcgr = 0x58094, 943 .hid_width = 5, 944 .freq_tbl = ftbl_csi_p_clk_src, 945 .parent_map = gcc_csip_map, 946 .clkr.hw.init = &(struct clk_init_data) { 947 .name = "csi1p_clk_src", 948 .parent_data = gcc_csip_data, 949 .num_parents = ARRAY_SIZE(gcc_csip_data), 950 .ops = &clk_rcg2_ops, 951 } 952 }; 953 954 static struct clk_rcg2 csi2p_clk_src = { 955 .cmd_rcgr = 0x580a4, 956 .hid_width = 5, 957 .freq_tbl = ftbl_csi_p_clk_src, 958 .parent_map = gcc_csip_map, 959 .clkr.hw.init = &(struct clk_init_data) { 960 .name = "csi2p_clk_src", 961 .parent_data = gcc_csip_data, 962 .num_parents = ARRAY_SIZE(gcc_csip_data), 963 .ops = &clk_rcg2_ops, 964 } 965 }; 966 967 static const struct freq_tbl ftbl_csi_phytimer_clk_src[] = { 968 F(100000000, P_GPLL0_DIV2, 4, 0, 0), 969 F(200000000, P_GPLL0, 4, 0, 0), 970 F(266670000, P_GPLL0, 3, 0, 0), 971 { } 972 }; 973 974 static struct clk_rcg2 csi0phytimer_clk_src = { 975 .cmd_rcgr = 0x4e000, 976 .hid_width = 5, 977 .freq_tbl = ftbl_csi_phytimer_clk_src, 978 .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 979 .clkr.hw.init = &(struct clk_init_data) { 980 .name = "csi0phytimer_clk_src", 981 .parent_data = gcc_xo_gpll0_gpll0div2_data, 982 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 983 .ops = &clk_rcg2_ops, 984 } 985 }; 986 987 static struct clk_rcg2 csi1phytimer_clk_src = { 988 .cmd_rcgr = 0x4f000, 989 .hid_width = 5, 990 .freq_tbl = ftbl_csi_phytimer_clk_src, 991 .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 992 .clkr.hw.init = &(struct clk_init_data) { 993 .name = "csi1phytimer_clk_src", 994 .parent_data = gcc_xo_gpll0_gpll0div2_data, 995 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 996 .ops = &clk_rcg2_ops, 997 } 998 }; 999 1000 static struct clk_rcg2 csi2phytimer_clk_src = { 1001 .cmd_rcgr = 0x4f05c, 1002 .hid_width = 5, 1003 .freq_tbl = ftbl_csi_phytimer_clk_src, 1004 .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 1005 .clkr.hw.init = &(struct clk_init_data) { 1006 .name = "csi2phytimer_clk_src", 1007 .parent_data = gcc_xo_gpll0_gpll0div2_data, 1008 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 1009 .ops = &clk_rcg2_ops, 1010 } 1011 }; 1012 1013 static const struct parent_map gcc_esc_map[] = { 1014 { P_XO, 0 }, 1015 { P_GPLL0, 3 }, 1016 }; 1017 1018 static const struct clk_parent_data gcc_esc_vsync_data[] = { 1019 { .fw_name = "xo" }, 1020 { .hw = &gpll0.clkr.hw }, 1021 }; 1022 1023 static const struct freq_tbl ftbl_esc0_1_clk_src[] = { 1024 F(19200000, P_XO, 1, 0, 0), 1025 { } 1026 }; 1027 1028 static struct clk_rcg2 esc0_clk_src = { 1029 .cmd_rcgr = 0x4d05c, 1030 .hid_width = 5, 1031 .freq_tbl = ftbl_esc0_1_clk_src, 1032 .parent_map = gcc_esc_map, 1033 .clkr.hw.init = &(struct clk_init_data) { 1034 .name = "esc0_clk_src", 1035 .parent_data = gcc_esc_vsync_data, 1036 .num_parents = ARRAY_SIZE(gcc_esc_vsync_data), 1037 .ops = &clk_rcg2_ops, 1038 } 1039 }; 1040 1041 static struct clk_rcg2 esc1_clk_src = { 1042 .cmd_rcgr = 0x4d0a8, 1043 .hid_width = 5, 1044 .freq_tbl = ftbl_esc0_1_clk_src, 1045 .parent_map = gcc_esc_map, 1046 .clkr.hw.init = &(struct clk_init_data) { 1047 .name = "esc1_clk_src", 1048 .parent_data = gcc_esc_vsync_data, 1049 .num_parents = ARRAY_SIZE(gcc_esc_vsync_data), 1050 .ops = &clk_rcg2_ops, 1051 } 1052 }; 1053 1054 static const struct parent_map gcc_gfx3d_map[] = { 1055 { P_XO, 0 }, 1056 { P_GPLL0, 1 }, 1057 { P_GPLL3, 2 }, 1058 { P_GPLL6, 3 }, 1059 { P_GPLL4, 4 }, 1060 { P_GPLL0_DIV2, 5 }, 1061 { P_GPLL6_DIV2, 6 }, 1062 }; 1063 1064 static const struct clk_parent_data gcc_gfx3d_data[] = { 1065 { .fw_name = "xo" }, 1066 { .hw = &gpll0.clkr.hw }, 1067 { .hw = &gpll3.clkr.hw }, 1068 { .hw = &gpll6.clkr.hw }, 1069 { .hw = &gpll4.clkr.hw }, 1070 { .hw = &gpll0_early_div.hw }, 1071 { .hw = &gpll6_early_div.hw }, 1072 }; 1073 1074 static const struct freq_tbl ftbl_gfx3d_clk_src[] = { 1075 F(19200000, P_XO, 1, 0, 0), 1076 F(50000000, P_GPLL0_DIV2, 8, 0, 0), 1077 F(80000000, P_GPLL0_DIV2, 5, 0, 0), 1078 F(100000000, P_GPLL0_DIV2, 4, 0, 0), 1079 F(133330000, P_GPLL0_DIV2, 3, 0, 0), 1080 F(160000000, P_GPLL0_DIV2, 2.5, 0, 0), 1081 F(200000000, P_GPLL0_DIV2, 2, 0, 0), 1082 F(266670000, P_GPLL0, 3.0, 0, 0), 1083 F(320000000, P_GPLL0, 2.5, 0, 0), 1084 F(400000000, P_GPLL0, 2, 0, 0), 1085 F(460800000, P_GPLL4, 2.5, 0, 0), 1086 F(510000000, P_GPLL3, 2, 0, 0), 1087 F(560000000, P_GPLL3, 2, 0, 0), 1088 F(600000000, P_GPLL3, 2, 0, 0), 1089 F(650000000, P_GPLL3, 2, 0, 0), 1090 F(685000000, P_GPLL3, 2, 0, 0), 1091 F(725000000, P_GPLL3, 2, 0, 0), 1092 { } 1093 }; 1094 1095 static struct clk_rcg2 gfx3d_clk_src = { 1096 .cmd_rcgr = 0x59000, 1097 .hid_width = 5, 1098 .freq_tbl = ftbl_gfx3d_clk_src, 1099 .parent_map = gcc_gfx3d_map, 1100 .clkr.hw.init = &(struct clk_init_data) { 1101 .name = "gfx3d_clk_src", 1102 .parent_data = gcc_gfx3d_data, 1103 .num_parents = ARRAY_SIZE(gcc_gfx3d_data), 1104 .ops = &clk_rcg2_floor_ops, 1105 .flags = CLK_SET_RATE_PARENT, 1106 } 1107 }; 1108 1109 static const struct freq_tbl ftbl_gp_clk_src[] = { 1110 F(19200000, P_XO, 1, 0, 0), 1111 { } 1112 }; 1113 1114 static struct clk_rcg2 gp1_clk_src = { 1115 .cmd_rcgr = 0x08004, 1116 .hid_width = 5, 1117 .mnd_width = 8, 1118 .freq_tbl = ftbl_gp_clk_src, 1119 .parent_map = gcc_gp_map, 1120 .clkr.hw.init = &(struct clk_init_data) { 1121 .name = "gp1_clk_src", 1122 .parent_data = gcc_gp_data, 1123 .num_parents = ARRAY_SIZE(gcc_gp_data), 1124 .ops = &clk_rcg2_ops, 1125 } 1126 }; 1127 1128 static struct clk_rcg2 gp2_clk_src = { 1129 .cmd_rcgr = 0x09004, 1130 .hid_width = 5, 1131 .mnd_width = 8, 1132 .freq_tbl = ftbl_gp_clk_src, 1133 .parent_map = gcc_gp_map, 1134 .clkr.hw.init = &(struct clk_init_data) { 1135 .name = "gp2_clk_src", 1136 .parent_data = gcc_gp_data, 1137 .num_parents = ARRAY_SIZE(gcc_gp_data), 1138 .ops = &clk_rcg2_ops, 1139 } 1140 }; 1141 1142 static struct clk_rcg2 gp3_clk_src = { 1143 .cmd_rcgr = 0x0a004, 1144 .hid_width = 5, 1145 .mnd_width = 8, 1146 .freq_tbl = ftbl_gp_clk_src, 1147 .parent_map = gcc_gp_map, 1148 .clkr.hw.init = &(struct clk_init_data) { 1149 .name = "gp3_clk_src", 1150 .parent_data = gcc_gp_data, 1151 .num_parents = ARRAY_SIZE(gcc_gp_data), 1152 .ops = &clk_rcg2_ops, 1153 } 1154 }; 1155 1156 static const struct parent_map gcc_jpeg0_map[] = { 1157 { P_XO, 0 }, 1158 { P_GPLL0, 1 }, 1159 { P_GPLL6, 2 }, 1160 { P_GPLL0_DIV2, 4 }, 1161 { P_GPLL2, 5 }, 1162 }; 1163 1164 static const struct clk_parent_data gcc_jpeg0_data[] = { 1165 { .fw_name = "xo" }, 1166 { .hw = &gpll0.clkr.hw }, 1167 { .hw = &gpll6.clkr.hw }, 1168 { .hw = &gpll0_early_div.hw }, 1169 { .hw = &gpll2.clkr.hw }, 1170 }; 1171 1172 static const struct freq_tbl ftbl_jpeg0_clk_src[] = { 1173 F(66670000, P_GPLL0_DIV2, 6, 0, 0), 1174 F(133330000, P_GPLL0, 6, 0, 0), 1175 F(200000000, P_GPLL0, 4, 0, 0), 1176 F(266670000, P_GPLL0, 3, 0, 0), 1177 F(310000000, P_GPLL2, 3, 0, 0), 1178 F(320000000, P_GPLL0, 2.5, 0, 0), 1179 { } 1180 }; 1181 1182 static struct clk_rcg2 jpeg0_clk_src = { 1183 .cmd_rcgr = 0x57000, 1184 .hid_width = 5, 1185 .freq_tbl = ftbl_jpeg0_clk_src, 1186 .parent_map = gcc_jpeg0_map, 1187 .clkr.hw.init = &(struct clk_init_data) { 1188 .name = "jpeg0_clk_src", 1189 .parent_data = gcc_jpeg0_data, 1190 .num_parents = ARRAY_SIZE(gcc_jpeg0_data), 1191 .ops = &clk_rcg2_ops, 1192 } 1193 }; 1194 1195 static const struct parent_map gcc_mclk_map[] = { 1196 { P_XO, 0 }, 1197 { P_GPLL0, 1 }, 1198 { P_GPLL6, 2 }, 1199 { P_GPLL0_DIV2, 4 }, 1200 { P_GPLL6_DIV2, 5 }, 1201 { P_SLEEP_CLK, 6 }, 1202 }; 1203 1204 static const struct clk_parent_data gcc_mclk_data[] = { 1205 { .fw_name = "xo" }, 1206 { .hw = &gpll0.clkr.hw }, 1207 { .hw = &gpll6.clkr.hw }, 1208 { .hw = &gpll0_early_div.hw }, 1209 { .hw = &gpll6_early_div.hw }, 1210 { .fw_name = "sleep", .name = "sleep" }, 1211 }; 1212 1213 static const struct freq_tbl ftbl_mclk_clk_src[] = { 1214 F(19200000, P_GPLL6, 5, 4, 45), 1215 F(24000000, P_GPLL6_DIV2, 1, 2, 45), 1216 F(26000000, P_GPLL0, 1, 4, 123), 1217 F(33330000, P_GPLL0_DIV2, 12, 0, 0), 1218 F(36610000, P_GPLL6, 1, 2, 59), 1219 F(66667000, P_GPLL0, 12, 0, 0), 1220 { } 1221 }; 1222 1223 static struct clk_rcg2 mclk0_clk_src = { 1224 .cmd_rcgr = 0x52000, 1225 .hid_width = 5, 1226 .mnd_width = 8, 1227 .freq_tbl = ftbl_mclk_clk_src, 1228 .parent_map = gcc_mclk_map, 1229 .clkr.hw.init = &(struct clk_init_data) { 1230 .name = "mclk0_clk_src", 1231 .parent_data = gcc_mclk_data, 1232 .num_parents = ARRAY_SIZE(gcc_mclk_data), 1233 .ops = &clk_rcg2_ops, 1234 } 1235 }; 1236 1237 static struct clk_rcg2 mclk1_clk_src = { 1238 .cmd_rcgr = 0x53000, 1239 .hid_width = 5, 1240 .mnd_width = 8, 1241 .freq_tbl = ftbl_mclk_clk_src, 1242 .parent_map = gcc_mclk_map, 1243 .clkr.hw.init = &(struct clk_init_data) { 1244 .name = "mclk1_clk_src", 1245 .parent_data = gcc_mclk_data, 1246 .num_parents = ARRAY_SIZE(gcc_mclk_data), 1247 .ops = &clk_rcg2_ops, 1248 } 1249 }; 1250 1251 static struct clk_rcg2 mclk2_clk_src = { 1252 .cmd_rcgr = 0x5c000, 1253 .hid_width = 5, 1254 .mnd_width = 8, 1255 .freq_tbl = ftbl_mclk_clk_src, 1256 .parent_map = gcc_mclk_map, 1257 .clkr.hw.init = &(struct clk_init_data) { 1258 .name = "mclk2_clk_src", 1259 .parent_data = gcc_mclk_data, 1260 .num_parents = ARRAY_SIZE(gcc_mclk_data), 1261 .ops = &clk_rcg2_ops, 1262 } 1263 }; 1264 1265 static struct clk_rcg2 mclk3_clk_src = { 1266 .cmd_rcgr = 0x5e000, 1267 .hid_width = 5, 1268 .mnd_width = 8, 1269 .freq_tbl = ftbl_mclk_clk_src, 1270 .parent_map = gcc_mclk_map, 1271 .clkr.hw.init = &(struct clk_init_data) { 1272 .name = "mclk3_clk_src", 1273 .parent_data = gcc_mclk_data, 1274 .num_parents = ARRAY_SIZE(gcc_mclk_data), 1275 .ops = &clk_rcg2_ops, 1276 } 1277 }; 1278 1279 static const struct parent_map gcc_mdp_map[] = { 1280 { P_XO, 0 }, 1281 { P_GPLL0, 1 }, 1282 { P_GPLL6, 3 }, 1283 { P_GPLL0_DIV2, 4 }, 1284 }; 1285 1286 static const struct clk_parent_data gcc_mdp_data[] = { 1287 { .fw_name = "xo" }, 1288 { .hw = &gpll0.clkr.hw }, 1289 { .hw = &gpll6.clkr.hw }, 1290 { .hw = &gpll0_early_div.hw }, 1291 }; 1292 1293 static const struct freq_tbl ftbl_mdp_clk_src[] = { 1294 F(50000000, P_GPLL0_DIV2, 8, 0, 0), 1295 F(80000000, P_GPLL0_DIV2, 5, 0, 0), 1296 F(160000000, P_GPLL0_DIV2, 2.5, 0, 0), 1297 F(200000000, P_GPLL0, 4, 0, 0), 1298 F(266670000, P_GPLL0, 3, 0, 0), 1299 F(320000000, P_GPLL0, 2.5, 0, 0), 1300 F(400000000, P_GPLL0, 2, 0, 0), 1301 { } 1302 }; 1303 1304 static struct clk_rcg2 mdp_clk_src = { 1305 .cmd_rcgr = 0x4d014, 1306 .hid_width = 5, 1307 .freq_tbl = ftbl_mdp_clk_src, 1308 .parent_map = gcc_mdp_map, 1309 .clkr.hw.init = &(struct clk_init_data) { 1310 .name = "mdp_clk_src", 1311 .parent_data = gcc_mdp_data, 1312 .num_parents = ARRAY_SIZE(gcc_mdp_data), 1313 .ops = &clk_rcg2_ops, 1314 } 1315 }; 1316 1317 static const struct parent_map gcc_pclk0_map[] = { 1318 { P_XO, 0 }, 1319 { P_DSI0PLL, 1 }, 1320 { P_DSI1PLL, 3 }, 1321 }; 1322 1323 static const struct parent_map gcc_pclk1_map[] = { 1324 { P_XO, 0 }, 1325 { P_DSI0PLL, 3 }, 1326 { P_DSI1PLL, 1 }, 1327 }; 1328 1329 static const struct clk_parent_data gcc_pclk_data[] = { 1330 { .fw_name = "xo" }, 1331 { .fw_name = "dsi0pll", .name = "dsi0pll" }, 1332 { .fw_name = "dsi1pll", .name = "dsi1pll" }, 1333 }; 1334 1335 static struct clk_rcg2 pclk0_clk_src = { 1336 .cmd_rcgr = 0x4d000, 1337 .hid_width = 5, 1338 .mnd_width = 8, 1339 .parent_map = gcc_pclk0_map, 1340 .clkr.hw.init = &(struct clk_init_data) { 1341 .name = "pclk0_clk_src", 1342 .parent_data = gcc_pclk_data, 1343 .num_parents = ARRAY_SIZE(gcc_pclk_data), 1344 .ops = &clk_pixel_ops, 1345 .flags = CLK_SET_RATE_PARENT, 1346 } 1347 }; 1348 1349 static struct clk_rcg2 pclk1_clk_src = { 1350 .cmd_rcgr = 0x4d0b8, 1351 .hid_width = 5, 1352 .mnd_width = 8, 1353 .parent_map = gcc_pclk1_map, 1354 .clkr.hw.init = &(struct clk_init_data) { 1355 .name = "pclk1_clk_src", 1356 .parent_data = gcc_pclk_data, 1357 .num_parents = ARRAY_SIZE(gcc_pclk_data), 1358 .ops = &clk_pixel_ops, 1359 .flags = CLK_SET_RATE_PARENT, 1360 } 1361 }; 1362 1363 static const struct freq_tbl ftbl_pdm2_clk_src[] = { 1364 F(32000000, P_GPLL0_DIV2, 12.5, 0, 0), 1365 F(64000000, P_GPLL0, 12.5, 0, 0), 1366 { } 1367 }; 1368 1369 static struct clk_rcg2 pdm2_clk_src = { 1370 .cmd_rcgr = 0x44010, 1371 .hid_width = 5, 1372 .freq_tbl = ftbl_pdm2_clk_src, 1373 .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 1374 .clkr.hw.init = &(struct clk_init_data) { 1375 .name = "pdm2_clk_src", 1376 .parent_data = gcc_xo_gpll0_gpll0div2_data, 1377 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 1378 .ops = &clk_rcg2_ops, 1379 } 1380 }; 1381 1382 static const struct freq_tbl ftbl_rbcpr_gfx_clk_src[] = { 1383 F(19200000, P_XO, 1, 0, 0), 1384 F(50000000, P_GPLL0, 16, 0, 0), 1385 { } 1386 }; 1387 1388 static struct clk_rcg2 rbcpr_gfx_clk_src = { 1389 .cmd_rcgr = 0x3a00c, 1390 .hid_width = 5, 1391 .freq_tbl = ftbl_rbcpr_gfx_clk_src, 1392 .parent_map = gcc_xo_gpll0_gpll0div2_4_map, 1393 .clkr.hw.init = &(struct clk_init_data) { 1394 .name = "rbcpr_gfx_clk_src", 1395 .parent_data = gcc_xo_gpll0_gpll0div2_data, 1396 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 1397 .ops = &clk_rcg2_ops, 1398 } 1399 }; 1400 1401 static const struct parent_map gcc_sdcc1_ice_core_map[] = { 1402 { P_XO, 0 }, 1403 { P_GPLL0, 1 }, 1404 { P_GPLL6, 2 }, 1405 { P_GPLL0_DIV2, 4 }, 1406 }; 1407 1408 static const struct clk_parent_data gcc_sdcc1_ice_core_data[] = { 1409 { .fw_name = "xo" }, 1410 { .hw = &gpll0.clkr.hw }, 1411 { .hw = &gpll6.clkr.hw }, 1412 { .hw = &gpll0_early_div.hw }, 1413 }; 1414 1415 static const struct freq_tbl ftbl_sdcc1_ice_core_clk_src[] = { 1416 F(80000000, P_GPLL0_DIV2, 5, 0, 0), 1417 F(160000000, P_GPLL0, 5, 0, 0), 1418 F(270000000, P_GPLL6, 4, 0, 0), 1419 { } 1420 }; 1421 1422 static struct clk_rcg2 sdcc1_ice_core_clk_src = { 1423 .cmd_rcgr = 0x5d000, 1424 .hid_width = 5, 1425 .freq_tbl = ftbl_sdcc1_ice_core_clk_src, 1426 .parent_map = gcc_sdcc1_ice_core_map, 1427 .clkr.hw.init = &(struct clk_init_data) { 1428 .name = "sdcc1_ice_core_clk_src", 1429 .parent_data = gcc_sdcc1_ice_core_data, 1430 .num_parents = ARRAY_SIZE(gcc_sdcc1_ice_core_data), 1431 .ops = &clk_rcg2_ops, 1432 } 1433 }; 1434 1435 static const struct parent_map gcc_sdcc_apps_map[] = { 1436 { P_XO, 0 }, 1437 { P_GPLL0, 1 }, 1438 { P_GPLL4, 2 }, 1439 { P_GPLL0_DIV2, 4 }, 1440 }; 1441 1442 static const struct clk_parent_data gcc_sdcc_apss_data[] = { 1443 { .fw_name = "xo" }, 1444 { .hw = &gpll0.clkr.hw }, 1445 { .hw = &gpll4.clkr.hw }, 1446 { .hw = &gpll0_early_div.hw }, 1447 }; 1448 1449 static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = { 1450 F(144000, P_XO, 16, 3, 25), 1451 F(400000, P_XO, 12, 1, 4), 1452 F(20000000, P_GPLL0_DIV2, 5, 1, 4), 1453 F(25000000, P_GPLL0_DIV2, 16, 0, 0), 1454 F(50000000, P_GPLL0, 16, 0, 0), 1455 F(100000000, P_GPLL0, 8, 0, 0), 1456 F(177770000, P_GPLL0, 4.5, 0, 0), 1457 F(192000000, P_GPLL4, 6, 0, 0), 1458 F(384000000, P_GPLL4, 3, 0, 0), 1459 { } 1460 }; 1461 1462 static struct clk_rcg2 sdcc1_apps_clk_src = { 1463 .cmd_rcgr = 0x42004, 1464 .hid_width = 5, 1465 .mnd_width = 8, 1466 .freq_tbl = ftbl_sdcc1_apps_clk_src, 1467 .parent_map = gcc_sdcc_apps_map, 1468 .clkr.hw.init = &(struct clk_init_data) { 1469 .name = "sdcc1_apps_clk_src", 1470 .parent_data = gcc_sdcc_apss_data, 1471 .num_parents = ARRAY_SIZE(gcc_sdcc_apss_data), 1472 .ops = &clk_rcg2_floor_ops, 1473 } 1474 }; 1475 1476 static const struct freq_tbl ftbl_sdcc2_apps_clk_src[] = { 1477 F(144000, P_XO, 16, 3, 25), 1478 F(400000, P_XO, 12, 1, 4), 1479 F(20000000, P_GPLL0_DIV2, 5, 1, 4), 1480 F(25000000, P_GPLL0_DIV2, 16, 0, 0), 1481 F(50000000, P_GPLL0, 16, 0, 0), 1482 F(100000000, P_GPLL0, 8, 0, 0), 1483 F(177770000, P_GPLL0, 4.5, 0, 0), 1484 F(192000000, P_GPLL4, 6, 0, 0), 1485 F(200000000, P_GPLL0, 4, 0, 0), 1486 { } 1487 }; 1488 1489 static struct clk_rcg2 sdcc2_apps_clk_src = { 1490 .cmd_rcgr = 0x43004, 1491 .hid_width = 5, 1492 .mnd_width = 8, 1493 .freq_tbl = ftbl_sdcc2_apps_clk_src, 1494 .parent_map = gcc_sdcc_apps_map, 1495 .clkr.hw.init = &(struct clk_init_data) { 1496 .name = "sdcc2_apps_clk_src", 1497 .parent_data = gcc_sdcc_apss_data, 1498 .num_parents = ARRAY_SIZE(gcc_sdcc_apss_data), 1499 .ops = &clk_rcg2_floor_ops, 1500 } 1501 }; 1502 1503 static const struct freq_tbl ftbl_usb30_master_clk_src[] = { 1504 F(80000000, P_GPLL0_DIV2, 5, 0, 0), 1505 F(100000000, P_GPLL0, 8, 0, 0), 1506 F(133330000, P_GPLL0, 6, 0, 0), 1507 { } 1508 }; 1509 1510 static struct clk_rcg2 usb30_master_clk_src = { 1511 .cmd_rcgr = 0x3f00c, 1512 .hid_width = 5, 1513 .freq_tbl = ftbl_usb30_master_clk_src, 1514 .parent_map = gcc_xo_gpll0_gpll0div2_2_map, 1515 .clkr.hw.init = &(struct clk_init_data) { 1516 .name = "usb30_master_clk_src", 1517 .parent_data = gcc_xo_gpll0_gpll0div2_data, 1518 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data), 1519 .ops = &clk_rcg2_ops, 1520 } 1521 }; 1522 1523 static const struct parent_map gcc_usb30_mock_utmi_map[] = { 1524 { P_XO, 0 }, 1525 { P_GPLL6, 1 }, 1526 { P_GPLL6_DIV2, 2 }, 1527 { P_GPLL0, 3 }, 1528 { P_GPLL0_DIV2, 4 }, 1529 }; 1530 1531 static const struct clk_parent_data gcc_usb30_mock_utmi_data[] = { 1532 { .fw_name = "xo" }, 1533 { .hw = &gpll6.clkr.hw }, 1534 { .hw = &gpll6_early_div.hw }, 1535 { .hw = &gpll0.clkr.hw }, 1536 { .hw = &gpll0_early_div.hw }, 1537 }; 1538 1539 static const struct freq_tbl ftbl_usb30_mock_utmi_clk_src[] = { 1540 F(19200000, P_XO, 1, 0, 0), 1541 F(60000000, P_GPLL6_DIV2, 9, 1, 1), 1542 { } 1543 }; 1544 1545 static struct clk_rcg2 usb30_mock_utmi_clk_src = { 1546 .cmd_rcgr = 0x3f020, 1547 .hid_width = 5, 1548 .mnd_width = 8, 1549 .freq_tbl = ftbl_usb30_mock_utmi_clk_src, 1550 .parent_map = gcc_usb30_mock_utmi_map, 1551 .clkr.hw.init = &(struct clk_init_data) { 1552 .name = "usb30_mock_utmi_clk_src", 1553 .parent_data = gcc_usb30_mock_utmi_data, 1554 .num_parents = ARRAY_SIZE(gcc_usb30_mock_utmi_data), 1555 .ops = &clk_rcg2_ops, 1556 } 1557 }; 1558 1559 static const struct parent_map gcc_usb3_aux_map[] = { 1560 { P_XO, 0 }, 1561 { P_SLEEP_CLK, 6 }, 1562 }; 1563 1564 static const struct clk_parent_data gcc_usb3_aux_data[] = { 1565 { .fw_name = "xo" }, 1566 { .fw_name = "sleep", .name = "sleep" }, 1567 }; 1568 1569 static const struct freq_tbl ftbl_usb3_aux_clk_src[] = { 1570 F(19200000, P_XO, 1, 0, 0), 1571 { } 1572 }; 1573 1574 static struct clk_rcg2 usb3_aux_clk_src = { 1575 .cmd_rcgr = 0x3f05c, 1576 .hid_width = 5, 1577 .mnd_width = 8, 1578 .freq_tbl = ftbl_usb3_aux_clk_src, 1579 .parent_map = gcc_usb3_aux_map, 1580 .clkr.hw.init = &(struct clk_init_data) { 1581 .name = "usb3_aux_clk_src", 1582 .parent_data = gcc_usb3_aux_data, 1583 .num_parents = ARRAY_SIZE(gcc_usb3_aux_data), 1584 .ops = &clk_rcg2_ops, 1585 } 1586 }; 1587 1588 static const struct parent_map gcc_vcodec0_map[] = { 1589 { P_XO, 0 }, 1590 { P_GPLL0, 1 }, 1591 { P_GPLL6, 2 }, 1592 { P_GPLL2, 3 }, 1593 { P_GPLL0_DIV2, 4 }, 1594 }; 1595 1596 static const struct clk_parent_data gcc_vcodec0_data[] = { 1597 { .fw_name = "xo" }, 1598 { .hw = &gpll0.clkr.hw }, 1599 { .hw = &gpll6.clkr.hw }, 1600 { .hw = &gpll2.clkr.hw }, 1601 { .hw = &gpll0_early_div.hw }, 1602 }; 1603 1604 static const struct freq_tbl ftbl_vcodec0_clk_src[] = { 1605 F(114290000, P_GPLL0_DIV2, 3.5, 0, 0), 1606 F(228570000, P_GPLL0, 3.5, 0, 0), 1607 F(310000000, P_GPLL2, 3, 0, 0), 1608 F(360000000, P_GPLL6, 3, 0, 0), 1609 F(400000000, P_GPLL0, 2, 0, 0), 1610 F(465000000, P_GPLL2, 2, 0, 0), 1611 F(540000000, P_GPLL6, 2, 0, 0), 1612 { } 1613 }; 1614 1615 static struct clk_rcg2 vcodec0_clk_src = { 1616 .cmd_rcgr = 0x4c000, 1617 .hid_width = 5, 1618 .freq_tbl = ftbl_vcodec0_clk_src, 1619 .parent_map = gcc_vcodec0_map, 1620 .clkr.hw.init = &(struct clk_init_data) { 1621 .name = "vcodec0_clk_src", 1622 .parent_data = gcc_vcodec0_data, 1623 .num_parents = ARRAY_SIZE(gcc_vcodec0_data), 1624 .ops = &clk_rcg2_ops, 1625 } 1626 }; 1627 1628 static const struct parent_map gcc_vfe_map[] = { 1629 { P_XO, 0 }, 1630 { P_GPLL0, 1 }, 1631 { P_GPLL6, 2 }, 1632 { P_GPLL4, 3 }, 1633 { P_GPLL2, 4 }, 1634 { P_GPLL0_DIV2, 5 }, 1635 }; 1636 1637 static const struct clk_parent_data gcc_vfe_data[] = { 1638 { .fw_name = "xo" }, 1639 { .hw = &gpll0.clkr.hw }, 1640 { .hw = &gpll6.clkr.hw }, 1641 { .hw = &gpll4.clkr.hw }, 1642 { .hw = &gpll2.clkr.hw }, 1643 { .hw = &gpll0_early_div.hw }, 1644 }; 1645 1646 static const struct freq_tbl ftbl_vfe_clk_src[] = { 1647 F(50000000, P_GPLL0_DIV2, 8, 0, 0), 1648 F(100000000, P_GPLL0_DIV2, 4, 0, 0), 1649 F(133330000, P_GPLL0, 6, 0, 0), 1650 F(160000000, P_GPLL0, 5, 0, 0), 1651 F(200000000, P_GPLL0, 4, 0, 0), 1652 F(266670000, P_GPLL0, 3, 0, 0), 1653 F(310000000, P_GPLL2, 3, 0, 0), 1654 F(400000000, P_GPLL0, 2, 0, 0), 1655 F(465000000, P_GPLL2, 2, 0, 0), 1656 { } 1657 }; 1658 1659 static struct clk_rcg2 vfe0_clk_src = { 1660 .cmd_rcgr = 0x58000, 1661 .hid_width = 5, 1662 .freq_tbl = ftbl_vfe_clk_src, 1663 .parent_map = gcc_vfe_map, 1664 .clkr.hw.init = &(struct clk_init_data) { 1665 .name = "vfe0_clk_src", 1666 .parent_data = gcc_vfe_data, 1667 .num_parents = ARRAY_SIZE(gcc_vfe_data), 1668 .ops = &clk_rcg2_ops, 1669 } 1670 }; 1671 1672 static struct clk_rcg2 vfe1_clk_src = { 1673 .cmd_rcgr = 0x58054, 1674 .hid_width = 5, 1675 .freq_tbl = ftbl_vfe_clk_src, 1676 .parent_map = gcc_vfe_map, 1677 .clkr.hw.init = &(struct clk_init_data) { 1678 .name = "vfe1_clk_src", 1679 .parent_data = gcc_vfe_data, 1680 .num_parents = ARRAY_SIZE(gcc_vfe_data), 1681 .ops = &clk_rcg2_ops, 1682 } 1683 }; 1684 1685 static const struct parent_map gcc_vsync_map[] = { 1686 { P_XO, 0 }, 1687 { P_GPLL0, 2 }, 1688 }; 1689 1690 static const struct freq_tbl ftbl_vsync_clk_src[] = { 1691 F(19200000, P_XO, 1, 0, 0), 1692 { } 1693 }; 1694 1695 static struct clk_rcg2 vsync_clk_src = { 1696 .cmd_rcgr = 0x4d02c, 1697 .hid_width = 5, 1698 .freq_tbl = ftbl_vsync_clk_src, 1699 .parent_map = gcc_vsync_map, 1700 .clkr.hw.init = &(struct clk_init_data) { 1701 .name = "vsync_clk_src", 1702 .parent_data = gcc_esc_vsync_data, 1703 .num_parents = ARRAY_SIZE(gcc_esc_vsync_data), 1704 .ops = &clk_rcg2_ops, 1705 } 1706 }; 1707 1708 static struct clk_branch gcc_apc0_droop_detector_gpll0_clk = { 1709 .halt_reg = 0x78004, 1710 .halt_check = BRANCH_HALT, 1711 .clkr = { 1712 .enable_reg = 0x78004, 1713 .enable_mask = BIT(0), 1714 .hw.init = &(struct clk_init_data) { 1715 .name = "gcc_apc0_droop_detector_gpll0_clk", 1716 .parent_hws = (const struct clk_hw*[]){ 1717 &apc0_droop_detector_clk_src.clkr.hw, 1718 }, 1719 .num_parents = 1, 1720 .ops = &clk_branch2_ops, 1721 .flags = CLK_SET_RATE_PARENT, 1722 } 1723 } 1724 }; 1725 1726 static struct clk_branch gcc_apc1_droop_detector_gpll0_clk = { 1727 .halt_reg = 0x79004, 1728 .halt_check = BRANCH_HALT, 1729 .clkr = { 1730 .enable_reg = 0x79004, 1731 .enable_mask = BIT(0), 1732 .hw.init = &(struct clk_init_data) { 1733 .name = "gcc_apc1_droop_detector_gpll0_clk", 1734 .parent_hws = (const struct clk_hw*[]){ 1735 &apc1_droop_detector_clk_src.clkr.hw, 1736 }, 1737 .num_parents = 1, 1738 .ops = &clk_branch2_ops, 1739 .flags = CLK_SET_RATE_PARENT, 1740 } 1741 } 1742 }; 1743 1744 static struct clk_branch gcc_apss_ahb_clk = { 1745 .halt_reg = 0x4601c, 1746 .halt_check = BRANCH_HALT_VOTED, 1747 .clkr = { 1748 .enable_reg = 0x45004, 1749 .enable_mask = BIT(14), 1750 .hw.init = &(struct clk_init_data) { 1751 .name = "gcc_apss_ahb_clk", 1752 .parent_hws = (const struct clk_hw*[]){ 1753 &apss_ahb_clk_src.clkr.hw, 1754 }, 1755 .num_parents = 1, 1756 .ops = &clk_branch2_ops, 1757 .flags = CLK_SET_RATE_PARENT, 1758 } 1759 } 1760 }; 1761 1762 static struct clk_branch gcc_apss_axi_clk = { 1763 .halt_reg = 0x46020, 1764 .halt_check = BRANCH_HALT_VOTED, 1765 .clkr = { 1766 .enable_reg = 0x45004, 1767 .enable_mask = BIT(13), 1768 .hw.init = &(struct clk_init_data) { 1769 .name = "gcc_apss_axi_clk", 1770 .ops = &clk_branch2_ops, 1771 } 1772 } 1773 }; 1774 1775 static struct clk_branch gcc_apss_tcu_async_clk = { 1776 .halt_reg = 0x12018, 1777 .halt_check = BRANCH_HALT_VOTED, 1778 .clkr = { 1779 .enable_reg = 0x4500c, 1780 .enable_mask = BIT(1), 1781 .hw.init = &(struct clk_init_data) { 1782 .name = "gcc_apss_tcu_async_clk", 1783 .ops = &clk_branch2_ops, 1784 } 1785 } 1786 }; 1787 1788 static struct clk_branch gcc_bimc_gfx_clk = { 1789 .halt_reg = 0x59034, 1790 .halt_check = BRANCH_HALT, 1791 .clkr = { 1792 .enable_reg = 0x59034, 1793 .enable_mask = BIT(0), 1794 .hw.init = &(struct clk_init_data) { 1795 .name = "gcc_bimc_gfx_clk", 1796 .ops = &clk_branch2_ops, 1797 } 1798 } 1799 }; 1800 1801 static struct clk_branch gcc_bimc_gpu_clk = { 1802 .halt_reg = 0x59030, 1803 .halt_check = BRANCH_HALT, 1804 .clkr = { 1805 .enable_reg = 0x59030, 1806 .enable_mask = BIT(0), 1807 .hw.init = &(struct clk_init_data) { 1808 .name = "gcc_bimc_gpu_clk", 1809 .ops = &clk_branch2_ops, 1810 } 1811 } 1812 }; 1813 1814 static struct clk_branch gcc_blsp1_ahb_clk = { 1815 .halt_reg = 0x01008, 1816 .halt_check = BRANCH_HALT_VOTED, 1817 .clkr = { 1818 .enable_reg = 0x45004, 1819 .enable_mask = BIT(10), 1820 .hw.init = &(struct clk_init_data) { 1821 .name = "gcc_blsp1_ahb_clk", 1822 .ops = &clk_branch2_ops, 1823 } 1824 } 1825 }; 1826 1827 static struct clk_branch gcc_blsp2_ahb_clk = { 1828 .halt_reg = 0x0b008, 1829 .halt_check = BRANCH_HALT_VOTED, 1830 .clkr = { 1831 .enable_reg = 0x45004, 1832 .enable_mask = BIT(20), 1833 .hw.init = &(struct clk_init_data) { 1834 .name = "gcc_blsp2_ahb_clk", 1835 .ops = &clk_branch2_ops, 1836 } 1837 } 1838 }; 1839 1840 static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = { 1841 .halt_reg = 0x02008, 1842 .halt_check = BRANCH_HALT, 1843 .clkr = { 1844 .enable_reg = 0x02008, 1845 .enable_mask = BIT(0), 1846 .hw.init = &(struct clk_init_data) { 1847 .name = "gcc_blsp1_qup1_i2c_apps_clk", 1848 .parent_hws = (const struct clk_hw*[]){ 1849 &blsp1_qup1_i2c_apps_clk_src.clkr.hw, 1850 }, 1851 .num_parents = 1, 1852 .ops = &clk_branch2_ops, 1853 .flags = CLK_SET_RATE_PARENT, 1854 } 1855 } 1856 }; 1857 1858 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = { 1859 .halt_reg = 0x03010, 1860 .halt_check = BRANCH_HALT, 1861 .clkr = { 1862 .enable_reg = 0x03010, 1863 .enable_mask = BIT(0), 1864 .hw.init = &(struct clk_init_data) { 1865 .name = "gcc_blsp1_qup2_i2c_apps_clk", 1866 .parent_hws = (const struct clk_hw*[]){ 1867 &blsp1_qup2_i2c_apps_clk_src.clkr.hw, 1868 }, 1869 .num_parents = 1, 1870 .ops = &clk_branch2_ops, 1871 .flags = CLK_SET_RATE_PARENT, 1872 } 1873 } 1874 }; 1875 1876 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = { 1877 .halt_reg = 0x04020, 1878 .halt_check = BRANCH_HALT, 1879 .clkr = { 1880 .enable_reg = 0x04020, 1881 .enable_mask = BIT(0), 1882 .hw.init = &(struct clk_init_data) { 1883 .name = "gcc_blsp1_qup3_i2c_apps_clk", 1884 .parent_hws = (const struct clk_hw*[]){ 1885 &blsp1_qup3_i2c_apps_clk_src.clkr.hw, 1886 }, 1887 .num_parents = 1, 1888 .ops = &clk_branch2_ops, 1889 .flags = CLK_SET_RATE_PARENT, 1890 } 1891 } 1892 }; 1893 1894 static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = { 1895 .halt_reg = 0x05020, 1896 .halt_check = BRANCH_HALT, 1897 .clkr = { 1898 .enable_reg = 0x05020, 1899 .enable_mask = BIT(0), 1900 .hw.init = &(struct clk_init_data) { 1901 .name = "gcc_blsp1_qup4_i2c_apps_clk", 1902 .parent_hws = (const struct clk_hw*[]){ 1903 &blsp1_qup4_i2c_apps_clk_src.clkr.hw, 1904 }, 1905 .num_parents = 1, 1906 .ops = &clk_branch2_ops, 1907 .flags = CLK_SET_RATE_PARENT, 1908 } 1909 } 1910 }; 1911 1912 static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = { 1913 .halt_reg = 0x0c008, 1914 .halt_check = BRANCH_HALT, 1915 .clkr = { 1916 .enable_reg = 0x0c008, 1917 .enable_mask = BIT(0), 1918 .hw.init = &(struct clk_init_data) { 1919 .name = "gcc_blsp2_qup1_i2c_apps_clk", 1920 .parent_hws = (const struct clk_hw*[]){ 1921 &blsp2_qup1_i2c_apps_clk_src.clkr.hw, 1922 }, 1923 .num_parents = 1, 1924 .ops = &clk_branch2_ops, 1925 .flags = CLK_SET_RATE_PARENT, 1926 } 1927 } 1928 }; 1929 1930 static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = { 1931 .halt_reg = 0x0d010, 1932 .halt_check = BRANCH_HALT, 1933 .clkr = { 1934 .enable_reg = 0x0d010, 1935 .enable_mask = BIT(0), 1936 .hw.init = &(struct clk_init_data) { 1937 .name = "gcc_blsp2_qup2_i2c_apps_clk", 1938 .parent_hws = (const struct clk_hw*[]){ 1939 &blsp2_qup2_i2c_apps_clk_src.clkr.hw, 1940 }, 1941 .num_parents = 1, 1942 .ops = &clk_branch2_ops, 1943 .flags = CLK_SET_RATE_PARENT, 1944 } 1945 } 1946 }; 1947 1948 static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = { 1949 .halt_reg = 0x0f020, 1950 .halt_check = BRANCH_HALT, 1951 .clkr = { 1952 .enable_reg = 0x0f020, 1953 .enable_mask = BIT(0), 1954 .hw.init = &(struct clk_init_data) { 1955 .name = "gcc_blsp2_qup3_i2c_apps_clk", 1956 .parent_hws = (const struct clk_hw*[]){ 1957 &blsp2_qup3_i2c_apps_clk_src.clkr.hw, 1958 }, 1959 .num_parents = 1, 1960 .ops = &clk_branch2_ops, 1961 .flags = CLK_SET_RATE_PARENT, 1962 } 1963 } 1964 }; 1965 1966 static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = { 1967 .halt_reg = 0x18020, 1968 .halt_check = BRANCH_HALT, 1969 .clkr = { 1970 .enable_reg = 0x18020, 1971 .enable_mask = BIT(0), 1972 .hw.init = &(struct clk_init_data) { 1973 .name = "gcc_blsp2_qup4_i2c_apps_clk", 1974 .parent_hws = (const struct clk_hw*[]){ 1975 &blsp2_qup4_i2c_apps_clk_src.clkr.hw, 1976 }, 1977 .num_parents = 1, 1978 .ops = &clk_branch2_ops, 1979 .flags = CLK_SET_RATE_PARENT, 1980 } 1981 } 1982 }; 1983 1984 static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = { 1985 .halt_reg = 0x02004, 1986 .halt_check = BRANCH_HALT, 1987 .clkr = { 1988 .enable_reg = 0x02004, 1989 .enable_mask = BIT(0), 1990 .hw.init = &(struct clk_init_data) { 1991 .name = "gcc_blsp1_qup1_spi_apps_clk", 1992 .parent_hws = (const struct clk_hw*[]){ 1993 &blsp1_qup1_spi_apps_clk_src.clkr.hw, 1994 }, 1995 .num_parents = 1, 1996 .ops = &clk_branch2_ops, 1997 .flags = CLK_SET_RATE_PARENT, 1998 } 1999 } 2000 }; 2001 2002 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = { 2003 .halt_reg = 0x0300c, 2004 .halt_check = BRANCH_HALT, 2005 .clkr = { 2006 .enable_reg = 0x0300c, 2007 .enable_mask = BIT(0), 2008 .hw.init = &(struct clk_init_data) { 2009 .name = "gcc_blsp1_qup2_spi_apps_clk", 2010 .parent_hws = (const struct clk_hw*[]){ 2011 &blsp1_qup2_spi_apps_clk_src.clkr.hw, 2012 }, 2013 .num_parents = 1, 2014 .ops = &clk_branch2_ops, 2015 .flags = CLK_SET_RATE_PARENT, 2016 } 2017 } 2018 }; 2019 2020 static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = { 2021 .halt_reg = 0x0401c, 2022 .halt_check = BRANCH_HALT, 2023 .clkr = { 2024 .enable_reg = 0x0401c, 2025 .enable_mask = BIT(0), 2026 .hw.init = &(struct clk_init_data) { 2027 .name = "gcc_blsp1_qup3_spi_apps_clk", 2028 .parent_hws = (const struct clk_hw*[]){ 2029 &blsp1_qup3_spi_apps_clk_src.clkr.hw, 2030 }, 2031 .num_parents = 1, 2032 .ops = &clk_branch2_ops, 2033 .flags = CLK_SET_RATE_PARENT, 2034 } 2035 } 2036 }; 2037 2038 static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = { 2039 .halt_reg = 0x0501c, 2040 .halt_check = BRANCH_HALT, 2041 .clkr = { 2042 .enable_reg = 0x0501c, 2043 .enable_mask = BIT(0), 2044 .hw.init = &(struct clk_init_data) { 2045 .name = "gcc_blsp1_qup4_spi_apps_clk", 2046 .parent_hws = (const struct clk_hw*[]){ 2047 &blsp1_qup4_spi_apps_clk_src.clkr.hw, 2048 }, 2049 .num_parents = 1, 2050 .ops = &clk_branch2_ops, 2051 .flags = CLK_SET_RATE_PARENT, 2052 } 2053 } 2054 }; 2055 2056 static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = { 2057 .halt_reg = 0x0c004, 2058 .halt_check = BRANCH_HALT, 2059 .clkr = { 2060 .enable_reg = 0x0c004, 2061 .enable_mask = BIT(0), 2062 .hw.init = &(struct clk_init_data) { 2063 .name = "gcc_blsp2_qup1_spi_apps_clk", 2064 .parent_hws = (const struct clk_hw*[]){ 2065 &blsp2_qup1_spi_apps_clk_src.clkr.hw, 2066 }, 2067 .num_parents = 1, 2068 .ops = &clk_branch2_ops, 2069 .flags = CLK_SET_RATE_PARENT, 2070 } 2071 } 2072 }; 2073 2074 static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = { 2075 .halt_reg = 0x0d00c, 2076 .halt_check = BRANCH_HALT, 2077 .clkr = { 2078 .enable_reg = 0x0d00c, 2079 .enable_mask = BIT(0), 2080 .hw.init = &(struct clk_init_data) { 2081 .name = "gcc_blsp2_qup2_spi_apps_clk", 2082 .parent_hws = (const struct clk_hw*[]){ 2083 &blsp2_qup2_spi_apps_clk_src.clkr.hw, 2084 }, 2085 .num_parents = 1, 2086 .ops = &clk_branch2_ops, 2087 .flags = CLK_SET_RATE_PARENT, 2088 } 2089 } 2090 }; 2091 2092 static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = { 2093 .halt_reg = 0x0f01c, 2094 .halt_check = BRANCH_HALT, 2095 .clkr = { 2096 .enable_reg = 0x0f01c, 2097 .enable_mask = BIT(0), 2098 .hw.init = &(struct clk_init_data) { 2099 .name = "gcc_blsp2_qup3_spi_apps_clk", 2100 .parent_hws = (const struct clk_hw*[]){ 2101 &blsp2_qup3_spi_apps_clk_src.clkr.hw, 2102 }, 2103 .num_parents = 1, 2104 .ops = &clk_branch2_ops, 2105 .flags = CLK_SET_RATE_PARENT, 2106 } 2107 } 2108 }; 2109 2110 static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = { 2111 .halt_reg = 0x1801c, 2112 .halt_check = BRANCH_HALT, 2113 .clkr = { 2114 .enable_reg = 0x1801c, 2115 .enable_mask = BIT(0), 2116 .hw.init = &(struct clk_init_data) { 2117 .name = "gcc_blsp2_qup4_spi_apps_clk", 2118 .parent_hws = (const struct clk_hw*[]){ 2119 &blsp2_qup4_spi_apps_clk_src.clkr.hw, 2120 }, 2121 .num_parents = 1, 2122 .ops = &clk_branch2_ops, 2123 .flags = CLK_SET_RATE_PARENT, 2124 } 2125 } 2126 }; 2127 2128 static struct clk_branch gcc_blsp1_uart1_apps_clk = { 2129 .halt_reg = 0x0203c, 2130 .halt_check = BRANCH_HALT, 2131 .clkr = { 2132 .enable_reg = 0x0203c, 2133 .enable_mask = BIT(0), 2134 .hw.init = &(struct clk_init_data) { 2135 .name = "gcc_blsp1_uart1_apps_clk", 2136 .parent_hws = (const struct clk_hw*[]){ 2137 &blsp1_uart1_apps_clk_src.clkr.hw, 2138 }, 2139 .num_parents = 1, 2140 .ops = &clk_branch2_ops, 2141 .flags = CLK_SET_RATE_PARENT, 2142 } 2143 } 2144 }; 2145 2146 static struct clk_branch gcc_blsp1_uart2_apps_clk = { 2147 .halt_reg = 0x0302c, 2148 .halt_check = BRANCH_HALT, 2149 .clkr = { 2150 .enable_reg = 0x0302c, 2151 .enable_mask = BIT(0), 2152 .hw.init = &(struct clk_init_data) { 2153 .name = "gcc_blsp1_uart2_apps_clk", 2154 .parent_hws = (const struct clk_hw*[]){ 2155 &blsp1_uart2_apps_clk_src.clkr.hw, 2156 }, 2157 .num_parents = 1, 2158 .ops = &clk_branch2_ops, 2159 .flags = CLK_SET_RATE_PARENT, 2160 } 2161 } 2162 }; 2163 2164 static struct clk_branch gcc_blsp2_uart1_apps_clk = { 2165 .halt_reg = 0x0c03c, 2166 .halt_check = BRANCH_HALT, 2167 .clkr = { 2168 .enable_reg = 0x0c03c, 2169 .enable_mask = BIT(0), 2170 .hw.init = &(struct clk_init_data) { 2171 .name = "gcc_blsp2_uart1_apps_clk", 2172 .parent_hws = (const struct clk_hw*[]){ 2173 &blsp2_uart1_apps_clk_src.clkr.hw, 2174 }, 2175 .num_parents = 1, 2176 .ops = &clk_branch2_ops, 2177 .flags = CLK_SET_RATE_PARENT, 2178 } 2179 } 2180 }; 2181 2182 static struct clk_branch gcc_blsp2_uart2_apps_clk = { 2183 .halt_reg = 0x0d02c, 2184 .halt_check = BRANCH_HALT, 2185 .clkr = { 2186 .enable_reg = 0x0d02c, 2187 .enable_mask = BIT(0), 2188 .hw.init = &(struct clk_init_data) { 2189 .name = "gcc_blsp2_uart2_apps_clk", 2190 .parent_hws = (const struct clk_hw*[]){ 2191 &blsp2_uart2_apps_clk_src.clkr.hw, 2192 }, 2193 .num_parents = 1, 2194 .ops = &clk_branch2_ops, 2195 .flags = CLK_SET_RATE_PARENT, 2196 } 2197 } 2198 }; 2199 2200 static struct clk_branch gcc_boot_rom_ahb_clk = { 2201 .halt_reg = 0x1300c, 2202 .halt_check = BRANCH_HALT_VOTED, 2203 .clkr = { 2204 .enable_reg = 0x45004, 2205 .enable_mask = BIT(7), 2206 .hw.init = &(struct clk_init_data) { 2207 .name = "gcc_boot_rom_ahb_clk", 2208 .ops = &clk_branch2_ops, 2209 } 2210 } 2211 }; 2212 2213 static struct clk_branch gcc_camss_ahb_clk = { 2214 .halt_reg = 0x56004, 2215 .halt_check = BRANCH_HALT, 2216 .clkr = { 2217 .enable_reg = 0x56004, 2218 .enable_mask = BIT(0), 2219 .hw.init = &(struct clk_init_data) { 2220 .name = "gcc_camss_ahb_clk", 2221 .ops = &clk_branch2_ops, 2222 } 2223 } 2224 }; 2225 2226 static struct clk_branch gcc_camss_cci_ahb_clk = { 2227 .halt_reg = 0x5101c, 2228 .halt_check = BRANCH_HALT, 2229 .clkr = { 2230 .enable_reg = 0x5101c, 2231 .enable_mask = BIT(0), 2232 .hw.init = &(struct clk_init_data) { 2233 .name = "gcc_camss_cci_ahb_clk", 2234 .parent_hws = (const struct clk_hw*[]){ 2235 &camss_top_ahb_clk_src.clkr.hw, 2236 }, 2237 .num_parents = 1, 2238 .ops = &clk_branch2_ops, 2239 .flags = CLK_SET_RATE_PARENT, 2240 } 2241 } 2242 }; 2243 2244 static struct clk_branch gcc_camss_cci_clk = { 2245 .halt_reg = 0x51018, 2246 .halt_check = BRANCH_HALT, 2247 .clkr = { 2248 .enable_reg = 0x51018, 2249 .enable_mask = BIT(0), 2250 .hw.init = &(struct clk_init_data) { 2251 .name = "gcc_camss_cci_clk", 2252 .parent_hws = (const struct clk_hw*[]){ 2253 &cci_clk_src.clkr.hw, 2254 }, 2255 .num_parents = 1, 2256 .ops = &clk_branch2_ops, 2257 .flags = CLK_SET_RATE_PARENT, 2258 } 2259 } 2260 }; 2261 2262 static struct clk_branch gcc_camss_cpp_ahb_clk = { 2263 .halt_reg = 0x58040, 2264 .halt_check = BRANCH_HALT, 2265 .clkr = { 2266 .enable_reg = 0x58040, 2267 .enable_mask = BIT(0), 2268 .hw.init = &(struct clk_init_data) { 2269 .name = "gcc_camss_cpp_ahb_clk", 2270 .parent_hws = (const struct clk_hw*[]){ 2271 &camss_top_ahb_clk_src.clkr.hw, 2272 }, 2273 .num_parents = 1, 2274 .ops = &clk_branch2_ops, 2275 .flags = CLK_SET_RATE_PARENT, 2276 } 2277 } 2278 }; 2279 2280 static struct clk_branch gcc_camss_cpp_axi_clk = { 2281 .halt_reg = 0x58064, 2282 .halt_check = BRANCH_HALT, 2283 .clkr = { 2284 .enable_reg = 0x58064, 2285 .enable_mask = BIT(0), 2286 .hw.init = &(struct clk_init_data) { 2287 .name = "gcc_camss_cpp_axi_clk", 2288 .ops = &clk_branch2_ops, 2289 } 2290 } 2291 }; 2292 2293 static struct clk_branch gcc_camss_cpp_clk = { 2294 .halt_reg = 0x5803c, 2295 .halt_check = BRANCH_HALT, 2296 .clkr = { 2297 .enable_reg = 0x5803c, 2298 .enable_mask = BIT(0), 2299 .hw.init = &(struct clk_init_data) { 2300 .name = "gcc_camss_cpp_clk", 2301 .parent_hws = (const struct clk_hw*[]){ 2302 &cpp_clk_src.clkr.hw, 2303 }, 2304 .num_parents = 1, 2305 .ops = &clk_branch2_ops, 2306 .flags = CLK_SET_RATE_PARENT, 2307 } 2308 } 2309 }; 2310 2311 static struct clk_branch gcc_camss_csi0_ahb_clk = { 2312 .halt_reg = 0x4e040, 2313 .halt_check = BRANCH_HALT, 2314 .clkr = { 2315 .enable_reg = 0x4e040, 2316 .enable_mask = BIT(0), 2317 .hw.init = &(struct clk_init_data) { 2318 .name = "gcc_camss_csi0_ahb_clk", 2319 .parent_hws = (const struct clk_hw*[]){ 2320 &camss_top_ahb_clk_src.clkr.hw, 2321 }, 2322 .num_parents = 1, 2323 .ops = &clk_branch2_ops, 2324 .flags = CLK_SET_RATE_PARENT, 2325 } 2326 } 2327 }; 2328 2329 static struct clk_branch gcc_camss_csi1_ahb_clk = { 2330 .halt_reg = 0x4f040, 2331 .halt_check = BRANCH_HALT, 2332 .clkr = { 2333 .enable_reg = 0x4f040, 2334 .enable_mask = BIT(0), 2335 .hw.init = &(struct clk_init_data) { 2336 .name = "gcc_camss_csi1_ahb_clk", 2337 .parent_hws = (const struct clk_hw*[]){ 2338 &camss_top_ahb_clk_src.clkr.hw, 2339 }, 2340 .num_parents = 1, 2341 .ops = &clk_branch2_ops, 2342 .flags = CLK_SET_RATE_PARENT, 2343 } 2344 } 2345 }; 2346 2347 static struct clk_branch gcc_camss_csi2_ahb_clk = { 2348 .halt_reg = 0x3c040, 2349 .halt_check = BRANCH_HALT, 2350 .clkr = { 2351 .enable_reg = 0x3c040, 2352 .enable_mask = BIT(0), 2353 .hw.init = &(struct clk_init_data) { 2354 .name = "gcc_camss_csi2_ahb_clk", 2355 .parent_hws = (const struct clk_hw*[]){ 2356 &camss_top_ahb_clk_src.clkr.hw, 2357 }, 2358 .num_parents = 1, 2359 .ops = &clk_branch2_ops, 2360 .flags = CLK_SET_RATE_PARENT, 2361 } 2362 } 2363 }; 2364 2365 static struct clk_branch gcc_camss_csi0_clk = { 2366 .halt_reg = 0x4e03c, 2367 .halt_check = BRANCH_HALT, 2368 .clkr = { 2369 .enable_reg = 0x4e03c, 2370 .enable_mask = BIT(0), 2371 .hw.init = &(struct clk_init_data) { 2372 .name = "gcc_camss_csi0_clk", 2373 .parent_hws = (const struct clk_hw*[]){ 2374 &csi0_clk_src.clkr.hw, 2375 }, 2376 .num_parents = 1, 2377 .ops = &clk_branch2_ops, 2378 .flags = CLK_SET_RATE_PARENT, 2379 } 2380 } 2381 }; 2382 2383 static struct clk_branch gcc_camss_csi1_clk = { 2384 .halt_reg = 0x4f03c, 2385 .halt_check = BRANCH_HALT, 2386 .clkr = { 2387 .enable_reg = 0x4f03c, 2388 .enable_mask = BIT(0), 2389 .hw.init = &(struct clk_init_data) { 2390 .name = "gcc_camss_csi1_clk", 2391 .parent_hws = (const struct clk_hw*[]){ 2392 &csi1_clk_src.clkr.hw, 2393 }, 2394 .num_parents = 1, 2395 .ops = &clk_branch2_ops, 2396 .flags = CLK_SET_RATE_PARENT, 2397 } 2398 } 2399 }; 2400 2401 static struct clk_branch gcc_camss_csi2_clk = { 2402 .halt_reg = 0x3c03c, 2403 .halt_check = BRANCH_HALT, 2404 .clkr = { 2405 .enable_reg = 0x3c03c, 2406 .enable_mask = BIT(0), 2407 .hw.init = &(struct clk_init_data) { 2408 .name = "gcc_camss_csi2_clk", 2409 .parent_hws = (const struct clk_hw*[]){ 2410 &csi2_clk_src.clkr.hw, 2411 }, 2412 .num_parents = 1, 2413 .ops = &clk_branch2_ops, 2414 .flags = CLK_SET_RATE_PARENT, 2415 } 2416 } 2417 }; 2418 2419 static struct clk_branch gcc_camss_csi0_csiphy_3p_clk = { 2420 .halt_reg = 0x58090, 2421 .halt_check = BRANCH_HALT, 2422 .clkr = { 2423 .enable_reg = 0x58090, 2424 .enable_mask = BIT(0), 2425 .hw.init = &(struct clk_init_data) { 2426 .name = "gcc_camss_csi0_csiphy_3p_clk", 2427 .parent_hws = (const struct clk_hw*[]){ 2428 &csi0p_clk_src.clkr.hw, 2429 }, 2430 .num_parents = 1, 2431 .ops = &clk_branch2_ops, 2432 .flags = CLK_SET_RATE_PARENT, 2433 } 2434 } 2435 }; 2436 2437 static struct clk_branch gcc_camss_csi1_csiphy_3p_clk = { 2438 .halt_reg = 0x580a0, 2439 .halt_check = BRANCH_HALT, 2440 .clkr = { 2441 .enable_reg = 0x580a0, 2442 .enable_mask = BIT(0), 2443 .hw.init = &(struct clk_init_data) { 2444 .name = "gcc_camss_csi1_csiphy_3p_clk", 2445 .parent_hws = (const struct clk_hw*[]){ 2446 &csi1p_clk_src.clkr.hw, 2447 }, 2448 .num_parents = 1, 2449 .ops = &clk_branch2_ops, 2450 .flags = CLK_SET_RATE_PARENT, 2451 } 2452 } 2453 }; 2454 2455 static struct clk_branch gcc_camss_csi2_csiphy_3p_clk = { 2456 .halt_reg = 0x580b0, 2457 .halt_check = BRANCH_HALT, 2458 .clkr = { 2459 .enable_reg = 0x580b0, 2460 .enable_mask = BIT(0), 2461 .hw.init = &(struct clk_init_data) { 2462 .name = "gcc_camss_csi2_csiphy_3p_clk", 2463 .parent_hws = (const struct clk_hw*[]){ 2464 &csi2p_clk_src.clkr.hw, 2465 }, 2466 .num_parents = 1, 2467 .ops = &clk_branch2_ops, 2468 .flags = CLK_SET_RATE_PARENT, 2469 } 2470 } 2471 }; 2472 2473 static struct clk_branch gcc_camss_csi0phy_clk = { 2474 .halt_reg = 0x4e048, 2475 .halt_check = BRANCH_HALT, 2476 .clkr = { 2477 .enable_reg = 0x4e048, 2478 .enable_mask = BIT(0), 2479 .hw.init = &(struct clk_init_data) { 2480 .name = "gcc_camss_csi0phy_clk", 2481 .parent_hws = (const struct clk_hw*[]){ 2482 &csi0_clk_src.clkr.hw, 2483 }, 2484 .num_parents = 1, 2485 .ops = &clk_branch2_ops, 2486 .flags = CLK_SET_RATE_PARENT, 2487 } 2488 } 2489 }; 2490 2491 static struct clk_branch gcc_camss_csi1phy_clk = { 2492 .halt_reg = 0x4f048, 2493 .halt_check = BRANCH_HALT, 2494 .clkr = { 2495 .enable_reg = 0x4f048, 2496 .enable_mask = BIT(0), 2497 .hw.init = &(struct clk_init_data) { 2498 .name = "gcc_camss_csi1phy_clk", 2499 .parent_hws = (const struct clk_hw*[]){ 2500 &csi1_clk_src.clkr.hw, 2501 }, 2502 .num_parents = 1, 2503 .ops = &clk_branch2_ops, 2504 .flags = CLK_SET_RATE_PARENT, 2505 } 2506 } 2507 }; 2508 2509 static struct clk_branch gcc_camss_csi2phy_clk = { 2510 .halt_reg = 0x3c048, 2511 .halt_check = BRANCH_HALT, 2512 .clkr = { 2513 .enable_reg = 0x3c048, 2514 .enable_mask = BIT(0), 2515 .hw.init = &(struct clk_init_data) { 2516 .name = "gcc_camss_csi2phy_clk", 2517 .parent_hws = (const struct clk_hw*[]){ 2518 &csi2_clk_src.clkr.hw, 2519 }, 2520 .num_parents = 1, 2521 .ops = &clk_branch2_ops, 2522 .flags = CLK_SET_RATE_PARENT, 2523 } 2524 } 2525 }; 2526 2527 static struct clk_branch gcc_camss_csi0phytimer_clk = { 2528 .halt_reg = 0x4e01c, 2529 .halt_check = BRANCH_HALT, 2530 .clkr = { 2531 .enable_reg = 0x4e01c, 2532 .enable_mask = BIT(0), 2533 .hw.init = &(struct clk_init_data) { 2534 .name = "gcc_camss_csi0phytimer_clk", 2535 .parent_hws = (const struct clk_hw*[]){ 2536 &csi0phytimer_clk_src.clkr.hw, 2537 }, 2538 .num_parents = 1, 2539 .ops = &clk_branch2_ops, 2540 .flags = CLK_SET_RATE_PARENT, 2541 } 2542 } 2543 }; 2544 2545 static struct clk_branch gcc_camss_csi1phytimer_clk = { 2546 .halt_reg = 0x4f01c, 2547 .halt_check = BRANCH_HALT, 2548 .clkr = { 2549 .enable_reg = 0x4f01c, 2550 .enable_mask = BIT(0), 2551 .hw.init = &(struct clk_init_data) { 2552 .name = "gcc_camss_csi1phytimer_clk", 2553 .parent_hws = (const struct clk_hw*[]){ 2554 &csi1phytimer_clk_src.clkr.hw, 2555 }, 2556 .num_parents = 1, 2557 .ops = &clk_branch2_ops, 2558 .flags = CLK_SET_RATE_PARENT, 2559 } 2560 } 2561 }; 2562 2563 static struct clk_branch gcc_camss_csi2phytimer_clk = { 2564 .halt_reg = 0x4f068, 2565 .halt_check = BRANCH_HALT, 2566 .clkr = { 2567 .enable_reg = 0x4f068, 2568 .enable_mask = BIT(0), 2569 .hw.init = &(struct clk_init_data) { 2570 .name = "gcc_camss_csi2phytimer_clk", 2571 .parent_hws = (const struct clk_hw*[]){ 2572 &csi2phytimer_clk_src.clkr.hw, 2573 }, 2574 .num_parents = 1, 2575 .ops = &clk_branch2_ops, 2576 .flags = CLK_SET_RATE_PARENT, 2577 } 2578 } 2579 }; 2580 2581 static struct clk_branch gcc_camss_csi0pix_clk = { 2582 .halt_reg = 0x4e058, 2583 .halt_check = BRANCH_HALT, 2584 .clkr = { 2585 .enable_reg = 0x4e058, 2586 .enable_mask = BIT(0), 2587 .hw.init = &(struct clk_init_data) { 2588 .name = "gcc_camss_csi0pix_clk", 2589 .parent_hws = (const struct clk_hw*[]){ 2590 &csi0_clk_src.clkr.hw, 2591 }, 2592 .num_parents = 1, 2593 .ops = &clk_branch2_ops, 2594 .flags = CLK_SET_RATE_PARENT, 2595 } 2596 } 2597 }; 2598 2599 static struct clk_branch gcc_camss_csi1pix_clk = { 2600 .halt_reg = 0x4f058, 2601 .halt_check = BRANCH_HALT, 2602 .clkr = { 2603 .enable_reg = 0x4f058, 2604 .enable_mask = BIT(0), 2605 .hw.init = &(struct clk_init_data) { 2606 .name = "gcc_camss_csi1pix_clk", 2607 .parent_hws = (const struct clk_hw*[]){ 2608 &csi1_clk_src.clkr.hw, 2609 }, 2610 .num_parents = 1, 2611 .ops = &clk_branch2_ops, 2612 .flags = CLK_SET_RATE_PARENT, 2613 } 2614 } 2615 }; 2616 2617 static struct clk_branch gcc_camss_csi2pix_clk = { 2618 .halt_reg = 0x3c058, 2619 .halt_check = BRANCH_HALT, 2620 .clkr = { 2621 .enable_reg = 0x3c058, 2622 .enable_mask = BIT(0), 2623 .hw.init = &(struct clk_init_data) { 2624 .name = "gcc_camss_csi2pix_clk", 2625 .parent_hws = (const struct clk_hw*[]){ 2626 &csi2_clk_src.clkr.hw, 2627 }, 2628 .num_parents = 1, 2629 .ops = &clk_branch2_ops, 2630 .flags = CLK_SET_RATE_PARENT, 2631 } 2632 } 2633 }; 2634 2635 static struct clk_branch gcc_camss_csi0rdi_clk = { 2636 .halt_reg = 0x4e050, 2637 .halt_check = BRANCH_HALT, 2638 .clkr = { 2639 .enable_reg = 0x4e050, 2640 .enable_mask = BIT(0), 2641 .hw.init = &(struct clk_init_data) { 2642 .name = "gcc_camss_csi0rdi_clk", 2643 .parent_hws = (const struct clk_hw*[]){ 2644 &csi0_clk_src.clkr.hw, 2645 }, 2646 .num_parents = 1, 2647 .ops = &clk_branch2_ops, 2648 .flags = CLK_SET_RATE_PARENT, 2649 } 2650 } 2651 }; 2652 2653 static struct clk_branch gcc_camss_csi1rdi_clk = { 2654 .halt_reg = 0x4f050, 2655 .halt_check = BRANCH_HALT, 2656 .clkr = { 2657 .enable_reg = 0x4f050, 2658 .enable_mask = BIT(0), 2659 .hw.init = &(struct clk_init_data) { 2660 .name = "gcc_camss_csi1rdi_clk", 2661 .parent_hws = (const struct clk_hw*[]){ 2662 &csi1_clk_src.clkr.hw, 2663 }, 2664 .num_parents = 1, 2665 .ops = &clk_branch2_ops, 2666 .flags = CLK_SET_RATE_PARENT, 2667 } 2668 } 2669 }; 2670 2671 static struct clk_branch gcc_camss_csi2rdi_clk = { 2672 .halt_reg = 0x3c050, 2673 .halt_check = BRANCH_HALT, 2674 .clkr = { 2675 .enable_reg = 0x3c050, 2676 .enable_mask = BIT(0), 2677 .hw.init = &(struct clk_init_data) { 2678 .name = "gcc_camss_csi2rdi_clk", 2679 .parent_hws = (const struct clk_hw*[]){ 2680 &csi2_clk_src.clkr.hw, 2681 }, 2682 .num_parents = 1, 2683 .ops = &clk_branch2_ops, 2684 .flags = CLK_SET_RATE_PARENT, 2685 } 2686 } 2687 }; 2688 2689 static struct clk_branch gcc_camss_csi_vfe0_clk = { 2690 .halt_reg = 0x58050, 2691 .halt_check = BRANCH_HALT, 2692 .clkr = { 2693 .enable_reg = 0x58050, 2694 .enable_mask = BIT(0), 2695 .hw.init = &(struct clk_init_data) { 2696 .name = "gcc_camss_csi_vfe0_clk", 2697 .parent_hws = (const struct clk_hw*[]){ 2698 &vfe0_clk_src.clkr.hw, 2699 }, 2700 .num_parents = 1, 2701 .ops = &clk_branch2_ops, 2702 .flags = CLK_SET_RATE_PARENT, 2703 } 2704 } 2705 }; 2706 2707 static struct clk_branch gcc_camss_csi_vfe1_clk = { 2708 .halt_reg = 0x58074, 2709 .halt_check = BRANCH_HALT, 2710 .clkr = { 2711 .enable_reg = 0x58074, 2712 .enable_mask = BIT(0), 2713 .hw.init = &(struct clk_init_data) { 2714 .name = "gcc_camss_csi_vfe1_clk", 2715 .parent_hws = (const struct clk_hw*[]){ 2716 &vfe1_clk_src.clkr.hw, 2717 }, 2718 .num_parents = 1, 2719 .ops = &clk_branch2_ops, 2720 .flags = CLK_SET_RATE_PARENT, 2721 } 2722 } 2723 }; 2724 2725 static struct clk_branch gcc_camss_gp0_clk = { 2726 .halt_reg = 0x54018, 2727 .halt_check = BRANCH_HALT, 2728 .clkr = { 2729 .enable_reg = 0x54018, 2730 .enable_mask = BIT(0), 2731 .hw.init = &(struct clk_init_data) { 2732 .name = "gcc_camss_gp0_clk", 2733 .parent_hws = (const struct clk_hw*[]){ 2734 &camss_gp0_clk_src.clkr.hw, 2735 }, 2736 .num_parents = 1, 2737 .ops = &clk_branch2_ops, 2738 .flags = CLK_SET_RATE_PARENT, 2739 } 2740 } 2741 }; 2742 2743 static struct clk_branch gcc_camss_gp1_clk = { 2744 .halt_reg = 0x55018, 2745 .halt_check = BRANCH_HALT, 2746 .clkr = { 2747 .enable_reg = 0x55018, 2748 .enable_mask = BIT(0), 2749 .hw.init = &(struct clk_init_data) { 2750 .name = "gcc_camss_gp1_clk", 2751 .parent_hws = (const struct clk_hw*[]){ 2752 &camss_gp1_clk_src.clkr.hw, 2753 }, 2754 .num_parents = 1, 2755 .ops = &clk_branch2_ops, 2756 .flags = CLK_SET_RATE_PARENT, 2757 } 2758 } 2759 }; 2760 2761 static struct clk_branch gcc_camss_ispif_ahb_clk = { 2762 .halt_reg = 0x50004, 2763 .halt_check = BRANCH_HALT, 2764 .clkr = { 2765 .enable_reg = 0x50004, 2766 .enable_mask = BIT(0), 2767 .hw.init = &(struct clk_init_data) { 2768 .name = "gcc_camss_ispif_ahb_clk", 2769 .parent_hws = (const struct clk_hw*[]){ 2770 &camss_top_ahb_clk_src.clkr.hw, 2771 }, 2772 .num_parents = 1, 2773 .ops = &clk_branch2_ops, 2774 .flags = CLK_SET_RATE_PARENT, 2775 } 2776 } 2777 }; 2778 2779 static struct clk_branch gcc_camss_jpeg0_clk = { 2780 .halt_reg = 0x57020, 2781 .halt_check = BRANCH_HALT, 2782 .clkr = { 2783 .enable_reg = 0x57020, 2784 .enable_mask = BIT(0), 2785 .hw.init = &(struct clk_init_data) { 2786 .name = "gcc_camss_jpeg0_clk", 2787 .parent_hws = (const struct clk_hw*[]){ 2788 &jpeg0_clk_src.clkr.hw, 2789 }, 2790 .num_parents = 1, 2791 .ops = &clk_branch2_ops, 2792 .flags = CLK_SET_RATE_PARENT, 2793 } 2794 } 2795 }; 2796 2797 static struct clk_branch gcc_camss_jpeg_ahb_clk = { 2798 .halt_reg = 0x57024, 2799 .halt_check = BRANCH_HALT, 2800 .clkr = { 2801 .enable_reg = 0x57024, 2802 .enable_mask = BIT(0), 2803 .hw.init = &(struct clk_init_data) { 2804 .name = "gcc_camss_jpeg_ahb_clk", 2805 .parent_hws = (const struct clk_hw*[]){ 2806 &camss_top_ahb_clk_src.clkr.hw, 2807 }, 2808 .num_parents = 1, 2809 .ops = &clk_branch2_ops, 2810 .flags = CLK_SET_RATE_PARENT, 2811 } 2812 } 2813 }; 2814 2815 static struct clk_branch gcc_camss_jpeg_axi_clk = { 2816 .halt_reg = 0x57028, 2817 .halt_check = BRANCH_HALT, 2818 .clkr = { 2819 .enable_reg = 0x57028, 2820 .enable_mask = BIT(0), 2821 .hw.init = &(struct clk_init_data) { 2822 .name = "gcc_camss_jpeg_axi_clk", 2823 .ops = &clk_branch2_ops, 2824 } 2825 } 2826 }; 2827 2828 static struct clk_branch gcc_camss_mclk0_clk = { 2829 .halt_reg = 0x52018, 2830 .halt_check = BRANCH_HALT, 2831 .clkr = { 2832 .enable_reg = 0x52018, 2833 .enable_mask = BIT(0), 2834 .hw.init = &(struct clk_init_data) { 2835 .name = "gcc_camss_mclk0_clk", 2836 .parent_hws = (const struct clk_hw*[]){ 2837 &mclk0_clk_src.clkr.hw, 2838 }, 2839 .num_parents = 1, 2840 .ops = &clk_branch2_ops, 2841 .flags = CLK_SET_RATE_PARENT, 2842 } 2843 } 2844 }; 2845 2846 static struct clk_branch gcc_camss_mclk1_clk = { 2847 .halt_reg = 0x53018, 2848 .halt_check = BRANCH_HALT, 2849 .clkr = { 2850 .enable_reg = 0x53018, 2851 .enable_mask = BIT(0), 2852 .hw.init = &(struct clk_init_data) { 2853 .name = "gcc_camss_mclk1_clk", 2854 .parent_hws = (const struct clk_hw*[]){ 2855 &mclk1_clk_src.clkr.hw, 2856 }, 2857 .num_parents = 1, 2858 .ops = &clk_branch2_ops, 2859 .flags = CLK_SET_RATE_PARENT, 2860 } 2861 } 2862 }; 2863 2864 static struct clk_branch gcc_camss_mclk2_clk = { 2865 .halt_reg = 0x5c018, 2866 .halt_check = BRANCH_HALT, 2867 .clkr = { 2868 .enable_reg = 0x5c018, 2869 .enable_mask = BIT(0), 2870 .hw.init = &(struct clk_init_data) { 2871 .name = "gcc_camss_mclk2_clk", 2872 .parent_hws = (const struct clk_hw*[]){ 2873 &mclk2_clk_src.clkr.hw, 2874 }, 2875 .num_parents = 1, 2876 .ops = &clk_branch2_ops, 2877 .flags = CLK_SET_RATE_PARENT, 2878 } 2879 } 2880 }; 2881 2882 static struct clk_branch gcc_camss_mclk3_clk = { 2883 .halt_reg = 0x5e018, 2884 .halt_check = BRANCH_HALT, 2885 .clkr = { 2886 .enable_reg = 0x5e018, 2887 .enable_mask = BIT(0), 2888 .hw.init = &(struct clk_init_data) { 2889 .name = "gcc_camss_mclk3_clk", 2890 .parent_hws = (const struct clk_hw*[]){ 2891 &mclk3_clk_src.clkr.hw, 2892 }, 2893 .num_parents = 1, 2894 .ops = &clk_branch2_ops, 2895 .flags = CLK_SET_RATE_PARENT, 2896 } 2897 } 2898 }; 2899 2900 static struct clk_branch gcc_camss_micro_ahb_clk = { 2901 .halt_reg = 0x5600c, 2902 .halt_check = BRANCH_HALT, 2903 .clkr = { 2904 .enable_reg = 0x5600c, 2905 .enable_mask = BIT(0), 2906 .hw.init = &(struct clk_init_data) { 2907 .name = "gcc_camss_micro_ahb_clk", 2908 .parent_hws = (const struct clk_hw*[]){ 2909 &camss_top_ahb_clk_src.clkr.hw, 2910 }, 2911 .num_parents = 1, 2912 .ops = &clk_branch2_ops, 2913 .flags = CLK_SET_RATE_PARENT, 2914 } 2915 } 2916 }; 2917 2918 static struct clk_branch gcc_camss_top_ahb_clk = { 2919 .halt_reg = 0x5a014, 2920 .halt_check = BRANCH_HALT, 2921 .clkr = { 2922 .enable_reg = 0x5a014, 2923 .enable_mask = BIT(0), 2924 .hw.init = &(struct clk_init_data) { 2925 .name = "gcc_camss_top_ahb_clk", 2926 .parent_hws = (const struct clk_hw*[]){ 2927 &camss_top_ahb_clk_src.clkr.hw, 2928 }, 2929 .num_parents = 1, 2930 .ops = &clk_branch2_ops, 2931 .flags = CLK_SET_RATE_PARENT, 2932 } 2933 } 2934 }; 2935 2936 static struct clk_branch gcc_camss_vfe0_ahb_clk = { 2937 .halt_reg = 0x58044, 2938 .halt_check = BRANCH_HALT, 2939 .clkr = { 2940 .enable_reg = 0x58044, 2941 .enable_mask = BIT(0), 2942 .hw.init = &(struct clk_init_data) { 2943 .name = "gcc_camss_vfe0_ahb_clk", 2944 .parent_hws = (const struct clk_hw*[]){ 2945 &camss_top_ahb_clk_src.clkr.hw, 2946 }, 2947 .num_parents = 1, 2948 .ops = &clk_branch2_ops, 2949 .flags = CLK_SET_RATE_PARENT, 2950 } 2951 } 2952 }; 2953 2954 static struct clk_branch gcc_camss_vfe0_axi_clk = { 2955 .halt_reg = 0x58048, 2956 .halt_check = BRANCH_HALT, 2957 .clkr = { 2958 .enable_reg = 0x58048, 2959 .enable_mask = BIT(0), 2960 .hw.init = &(struct clk_init_data) { 2961 .name = "gcc_camss_vfe0_axi_clk", 2962 .ops = &clk_branch2_ops, 2963 } 2964 } 2965 }; 2966 2967 static struct clk_branch gcc_camss_vfe0_clk = { 2968 .halt_reg = 0x58038, 2969 .halt_check = BRANCH_HALT, 2970 .clkr = { 2971 .enable_reg = 0x58038, 2972 .enable_mask = BIT(0), 2973 .hw.init = &(struct clk_init_data) { 2974 .name = "gcc_camss_vfe0_clk", 2975 .parent_hws = (const struct clk_hw*[]){ 2976 &vfe0_clk_src.clkr.hw, 2977 }, 2978 .num_parents = 1, 2979 .ops = &clk_branch2_ops, 2980 .flags = CLK_SET_RATE_PARENT, 2981 } 2982 } 2983 }; 2984 2985 static struct clk_branch gcc_camss_vfe1_ahb_clk = { 2986 .halt_reg = 0x58060, 2987 .halt_check = BRANCH_HALT, 2988 .clkr = { 2989 .enable_reg = 0x58060, 2990 .enable_mask = BIT(0), 2991 .hw.init = &(struct clk_init_data) { 2992 .name = "gcc_camss_vfe1_ahb_clk", 2993 .parent_hws = (const struct clk_hw*[]){ 2994 &camss_top_ahb_clk_src.clkr.hw, 2995 }, 2996 .num_parents = 1, 2997 .ops = &clk_branch2_ops, 2998 .flags = CLK_SET_RATE_PARENT, 2999 } 3000 } 3001 }; 3002 3003 static struct clk_branch gcc_camss_vfe1_axi_clk = { 3004 .halt_reg = 0x58068, 3005 .halt_check = BRANCH_HALT, 3006 .clkr = { 3007 .enable_reg = 0x58068, 3008 .enable_mask = BIT(0), 3009 .hw.init = &(struct clk_init_data) { 3010 .name = "gcc_camss_vfe1_axi_clk", 3011 .ops = &clk_branch2_ops, 3012 } 3013 } 3014 }; 3015 3016 static struct clk_branch gcc_camss_vfe1_clk = { 3017 .halt_reg = 0x5805c, 3018 .halt_check = BRANCH_HALT, 3019 .clkr = { 3020 .enable_reg = 0x5805c, 3021 .enable_mask = BIT(0), 3022 .hw.init = &(struct clk_init_data) { 3023 .name = "gcc_camss_vfe1_clk", 3024 .parent_hws = (const struct clk_hw*[]){ 3025 &vfe1_clk_src.clkr.hw, 3026 }, 3027 .num_parents = 1, 3028 .ops = &clk_branch2_ops, 3029 .flags = CLK_SET_RATE_PARENT, 3030 } 3031 } 3032 }; 3033 3034 static struct clk_branch gcc_cpp_tbu_clk = { 3035 .halt_reg = 0x12040, 3036 .halt_check = BRANCH_HALT_VOTED, 3037 .clkr = { 3038 .enable_reg = 0x4500c, 3039 .enable_mask = BIT(14), 3040 .hw.init = &(struct clk_init_data) { 3041 .name = "gcc_cpp_tbu_clk", 3042 .ops = &clk_branch2_ops, 3043 } 3044 } 3045 }; 3046 3047 static struct clk_branch gcc_crypto_ahb_clk = { 3048 .halt_reg = 0x16024, 3049 .halt_check = BRANCH_HALT_VOTED, 3050 .clkr = { 3051 .enable_reg = 0x45004, 3052 .enable_mask = BIT(0), 3053 .hw.init = &(struct clk_init_data) { 3054 .name = "gcc_crypto_ahb_clk", 3055 .ops = &clk_branch2_ops, 3056 } 3057 } 3058 }; 3059 3060 static struct clk_branch gcc_crypto_axi_clk = { 3061 .halt_reg = 0x16020, 3062 .halt_check = BRANCH_HALT_VOTED, 3063 .clkr = { 3064 .enable_reg = 0x45004, 3065 .enable_mask = BIT(1), 3066 .hw.init = &(struct clk_init_data) { 3067 .name = "gcc_crypto_axi_clk", 3068 .ops = &clk_branch2_ops, 3069 } 3070 } 3071 }; 3072 3073 static struct clk_branch gcc_crypto_clk = { 3074 .halt_reg = 0x1601c, 3075 .halt_check = BRANCH_HALT_VOTED, 3076 .clkr = { 3077 .enable_reg = 0x45004, 3078 .enable_mask = BIT(2), 3079 .hw.init = &(struct clk_init_data) { 3080 .name = "gcc_crypto_clk", 3081 .parent_hws = (const struct clk_hw*[]){ 3082 &crypto_clk_src.clkr.hw, 3083 }, 3084 .num_parents = 1, 3085 .ops = &clk_branch2_ops, 3086 .flags = CLK_SET_RATE_PARENT, 3087 } 3088 } 3089 }; 3090 3091 static struct clk_branch gcc_dcc_clk = { 3092 .halt_reg = 0x77004, 3093 .halt_check = BRANCH_HALT, 3094 .clkr = { 3095 .enable_reg = 0x77004, 3096 .enable_mask = BIT(0), 3097 .hw.init = &(struct clk_init_data) { 3098 .name = "gcc_dcc_clk", 3099 .ops = &clk_branch2_ops, 3100 } 3101 } 3102 }; 3103 3104 static struct clk_branch gcc_gp1_clk = { 3105 .halt_reg = 0x08000, 3106 .halt_check = BRANCH_HALT, 3107 .clkr = { 3108 .enable_reg = 0x08000, 3109 .enable_mask = BIT(0), 3110 .hw.init = &(struct clk_init_data) { 3111 .name = "gcc_gp1_clk", 3112 .parent_hws = (const struct clk_hw*[]){ 3113 &gp1_clk_src.clkr.hw, 3114 }, 3115 .num_parents = 1, 3116 .ops = &clk_branch2_ops, 3117 .flags = CLK_SET_RATE_PARENT, 3118 } 3119 } 3120 }; 3121 3122 static struct clk_branch gcc_gp2_clk = { 3123 .halt_reg = 0x09000, 3124 .halt_check = BRANCH_HALT, 3125 .clkr = { 3126 .enable_reg = 0x09000, 3127 .enable_mask = BIT(0), 3128 .hw.init = &(struct clk_init_data) { 3129 .name = "gcc_gp2_clk", 3130 .parent_hws = (const struct clk_hw*[]){ 3131 &gp2_clk_src.clkr.hw, 3132 }, 3133 .num_parents = 1, 3134 .ops = &clk_branch2_ops, 3135 .flags = CLK_SET_RATE_PARENT, 3136 } 3137 } 3138 }; 3139 3140 static struct clk_branch gcc_gp3_clk = { 3141 .halt_reg = 0x0a000, 3142 .halt_check = BRANCH_HALT, 3143 .clkr = { 3144 .enable_reg = 0x0a000, 3145 .enable_mask = BIT(0), 3146 .hw.init = &(struct clk_init_data) { 3147 .name = "gcc_gp3_clk", 3148 .parent_hws = (const struct clk_hw*[]){ 3149 &gp3_clk_src.clkr.hw, 3150 }, 3151 .num_parents = 1, 3152 .ops = &clk_branch2_ops, 3153 .flags = CLK_SET_RATE_PARENT, 3154 } 3155 } 3156 }; 3157 3158 static struct clk_branch gcc_jpeg_tbu_clk = { 3159 .halt_reg = 0x12034, 3160 .halt_check = BRANCH_HALT_VOTED, 3161 .clkr = { 3162 .enable_reg = 0x4500c, 3163 .enable_mask = BIT(10), 3164 .hw.init = &(struct clk_init_data) { 3165 .name = "gcc_jpeg_tbu_clk", 3166 .ops = &clk_branch2_ops, 3167 } 3168 } 3169 }; 3170 3171 static struct clk_branch gcc_mdp_tbu_clk = { 3172 .halt_reg = 0x1201c, 3173 .halt_check = BRANCH_HALT_VOTED, 3174 .clkr = { 3175 .enable_reg = 0x4500c, 3176 .enable_mask = BIT(4), 3177 .hw.init = &(struct clk_init_data) { 3178 .name = "gcc_mdp_tbu_clk", 3179 .ops = &clk_branch2_ops, 3180 } 3181 } 3182 }; 3183 3184 static struct clk_branch gcc_mdss_ahb_clk = { 3185 .halt_reg = 0x4d07c, 3186 .halt_check = BRANCH_HALT, 3187 .clkr = { 3188 .enable_reg = 0x4d07c, 3189 .enable_mask = BIT(0), 3190 .hw.init = &(struct clk_init_data) { 3191 .name = "gcc_mdss_ahb_clk", 3192 .ops = &clk_branch2_ops, 3193 } 3194 } 3195 }; 3196 3197 static struct clk_branch gcc_mdss_axi_clk = { 3198 .halt_reg = 0x4d080, 3199 .halt_check = BRANCH_HALT, 3200 .clkr = { 3201 .enable_reg = 0x4d080, 3202 .enable_mask = BIT(0), 3203 .hw.init = &(struct clk_init_data) { 3204 .name = "gcc_mdss_axi_clk", 3205 .ops = &clk_branch2_ops, 3206 } 3207 } 3208 }; 3209 3210 static struct clk_branch gcc_mdss_byte0_clk = { 3211 .halt_reg = 0x4d094, 3212 .halt_check = BRANCH_HALT, 3213 .clkr = { 3214 .enable_reg = 0x4d094, 3215 .enable_mask = BIT(0), 3216 .hw.init = &(struct clk_init_data) { 3217 .name = "gcc_mdss_byte0_clk", 3218 .parent_hws = (const struct clk_hw*[]){ 3219 &byte0_clk_src.clkr.hw, 3220 }, 3221 .num_parents = 1, 3222 .ops = &clk_branch2_ops, 3223 .flags = CLK_SET_RATE_PARENT, 3224 } 3225 } 3226 }; 3227 3228 static struct clk_branch gcc_mdss_byte1_clk = { 3229 .halt_reg = 0x4d0a0, 3230 .halt_check = BRANCH_HALT, 3231 .clkr = { 3232 .enable_reg = 0x4d0a0, 3233 .enable_mask = BIT(0), 3234 .hw.init = &(struct clk_init_data) { 3235 .name = "gcc_mdss_byte1_clk", 3236 .parent_hws = (const struct clk_hw*[]){ 3237 &byte1_clk_src.clkr.hw, 3238 }, 3239 .num_parents = 1, 3240 .ops = &clk_branch2_ops, 3241 .flags = CLK_SET_RATE_PARENT, 3242 } 3243 } 3244 }; 3245 3246 static struct clk_branch gcc_mdss_esc0_clk = { 3247 .halt_reg = 0x4d098, 3248 .halt_check = BRANCH_HALT, 3249 .clkr = { 3250 .enable_reg = 0x4d098, 3251 .enable_mask = BIT(0), 3252 .hw.init = &(struct clk_init_data) { 3253 .name = "gcc_mdss_esc0_clk", 3254 .parent_hws = (const struct clk_hw*[]){ 3255 &esc0_clk_src.clkr.hw, 3256 }, 3257 .num_parents = 1, 3258 .ops = &clk_branch2_ops, 3259 .flags = CLK_SET_RATE_PARENT, 3260 } 3261 } 3262 }; 3263 3264 static struct clk_branch gcc_mdss_esc1_clk = { 3265 .halt_reg = 0x4d09c, 3266 .halt_check = BRANCH_HALT, 3267 .clkr = { 3268 .enable_reg = 0x4d09c, 3269 .enable_mask = BIT(0), 3270 .hw.init = &(struct clk_init_data) { 3271 .name = "gcc_mdss_esc1_clk", 3272 .parent_hws = (const struct clk_hw*[]){ 3273 &esc1_clk_src.clkr.hw, 3274 }, 3275 .num_parents = 1, 3276 .ops = &clk_branch2_ops, 3277 .flags = CLK_SET_RATE_PARENT, 3278 } 3279 } 3280 }; 3281 3282 static struct clk_branch gcc_mdss_mdp_clk = { 3283 .halt_reg = 0x4d088, 3284 .halt_check = BRANCH_HALT, 3285 .clkr = { 3286 .enable_reg = 0x4d088, 3287 .enable_mask = BIT(0), 3288 .hw.init = &(struct clk_init_data) { 3289 .name = "gcc_mdss_mdp_clk", 3290 .parent_hws = (const struct clk_hw*[]){ 3291 &mdp_clk_src.clkr.hw, 3292 }, 3293 .num_parents = 1, 3294 .ops = &clk_branch2_ops, 3295 .flags = CLK_SET_RATE_PARENT, 3296 } 3297 } 3298 }; 3299 3300 static struct clk_branch gcc_mdss_pclk0_clk = { 3301 .halt_reg = 0x4d084, 3302 .halt_check = BRANCH_HALT, 3303 .clkr = { 3304 .enable_reg = 0x4d084, 3305 .enable_mask = BIT(0), 3306 .hw.init = &(struct clk_init_data) { 3307 .name = "gcc_mdss_pclk0_clk", 3308 .parent_hws = (const struct clk_hw*[]){ 3309 &pclk0_clk_src.clkr.hw, 3310 }, 3311 .num_parents = 1, 3312 .ops = &clk_branch2_ops, 3313 .flags = CLK_SET_RATE_PARENT, 3314 } 3315 } 3316 }; 3317 3318 static struct clk_branch gcc_mdss_pclk1_clk = { 3319 .halt_reg = 0x4d0a4, 3320 .halt_check = BRANCH_HALT, 3321 .clkr = { 3322 .enable_reg = 0x4d0a4, 3323 .enable_mask = BIT(0), 3324 .hw.init = &(struct clk_init_data) { 3325 .name = "gcc_mdss_pclk1_clk", 3326 .parent_hws = (const struct clk_hw*[]){ 3327 &pclk1_clk_src.clkr.hw, 3328 }, 3329 .num_parents = 1, 3330 .ops = &clk_branch2_ops, 3331 .flags = CLK_SET_RATE_PARENT, 3332 } 3333 } 3334 }; 3335 3336 static struct clk_branch gcc_mdss_vsync_clk = { 3337 .halt_reg = 0x4d090, 3338 .halt_check = BRANCH_HALT, 3339 .clkr = { 3340 .enable_reg = 0x4d090, 3341 .enable_mask = BIT(0), 3342 .hw.init = &(struct clk_init_data) { 3343 .name = "gcc_mdss_vsync_clk", 3344 .parent_hws = (const struct clk_hw*[]){ 3345 &vsync_clk_src.clkr.hw, 3346 }, 3347 .num_parents = 1, 3348 .ops = &clk_branch2_ops, 3349 .flags = CLK_SET_RATE_PARENT, 3350 } 3351 } 3352 }; 3353 3354 static struct clk_branch gcc_mss_cfg_ahb_clk = { 3355 .halt_reg = 0x49000, 3356 .halt_check = BRANCH_HALT, 3357 .clkr = { 3358 .enable_reg = 0x49000, 3359 .enable_mask = BIT(0), 3360 .hw.init = &(struct clk_init_data) { 3361 .name = "gcc_mss_cfg_ahb_clk", 3362 .ops = &clk_branch2_ops, 3363 } 3364 } 3365 }; 3366 3367 static struct clk_branch gcc_mss_q6_bimc_axi_clk = { 3368 .halt_reg = 0x49004, 3369 .halt_check = BRANCH_HALT, 3370 .clkr = { 3371 .enable_reg = 0x49004, 3372 .enable_mask = BIT(0), 3373 .hw.init = &(struct clk_init_data) { 3374 .name = "gcc_mss_q6_bimc_axi_clk", 3375 .ops = &clk_branch2_ops, 3376 } 3377 } 3378 }; 3379 3380 static struct clk_branch gcc_oxili_ahb_clk = { 3381 .halt_reg = 0x59028, 3382 .halt_check = BRANCH_HALT, 3383 .clkr = { 3384 .enable_reg = 0x59028, 3385 .enable_mask = BIT(0), 3386 .hw.init = &(struct clk_init_data) { 3387 .name = "gcc_oxili_ahb_clk", 3388 .ops = &clk_branch2_ops, 3389 } 3390 } 3391 }; 3392 3393 static struct clk_branch gcc_oxili_aon_clk = { 3394 .halt_reg = 0x59044, 3395 .halt_check = BRANCH_HALT, 3396 .clkr = { 3397 .enable_reg = 0x59044, 3398 .enable_mask = BIT(0), 3399 .hw.init = &(struct clk_init_data) { 3400 .name = "gcc_oxili_aon_clk", 3401 .parent_hws = (const struct clk_hw*[]){ 3402 &gfx3d_clk_src.clkr.hw, 3403 }, 3404 .num_parents = 1, 3405 .ops = &clk_branch2_ops, 3406 } 3407 } 3408 }; 3409 3410 static struct clk_branch gcc_oxili_gfx3d_clk = { 3411 .halt_reg = 0x59020, 3412 .halt_check = BRANCH_HALT, 3413 .clkr = { 3414 .enable_reg = 0x59020, 3415 .enable_mask = BIT(0), 3416 .hw.init = &(struct clk_init_data) { 3417 .name = "gcc_oxili_gfx3d_clk", 3418 .parent_hws = (const struct clk_hw*[]){ 3419 &gfx3d_clk_src.clkr.hw, 3420 }, 3421 .num_parents = 1, 3422 .ops = &clk_branch2_ops, 3423 .flags = CLK_SET_RATE_PARENT, 3424 } 3425 } 3426 }; 3427 3428 static struct clk_branch gcc_oxili_timer_clk = { 3429 .halt_reg = 0x59040, 3430 .halt_check = BRANCH_HALT, 3431 .clkr = { 3432 .enable_reg = 0x59040, 3433 .enable_mask = BIT(0), 3434 .hw.init = &(struct clk_init_data) { 3435 .name = "gcc_oxili_timer_clk", 3436 .ops = &clk_branch2_ops, 3437 } 3438 } 3439 }; 3440 3441 static struct clk_branch gcc_pcnoc_usb3_axi_clk = { 3442 .halt_reg = 0x3f038, 3443 .halt_check = BRANCH_HALT, 3444 .clkr = { 3445 .enable_reg = 0x3f038, 3446 .enable_mask = BIT(0), 3447 .hw.init = &(struct clk_init_data) { 3448 .name = "gcc_pcnoc_usb3_axi_clk", 3449 .parent_hws = (const struct clk_hw*[]){ 3450 &usb30_master_clk_src.clkr.hw, 3451 }, 3452 .num_parents = 1, 3453 .ops = &clk_branch2_ops, 3454 .flags = CLK_SET_RATE_PARENT, 3455 } 3456 } 3457 }; 3458 3459 static struct clk_branch gcc_pdm2_clk = { 3460 .halt_reg = 0x4400c, 3461 .halt_check = BRANCH_HALT, 3462 .clkr = { 3463 .enable_reg = 0x4400c, 3464 .enable_mask = BIT(0), 3465 .hw.init = &(struct clk_init_data) { 3466 .name = "gcc_pdm2_clk", 3467 .parent_hws = (const struct clk_hw*[]){ 3468 &pdm2_clk_src.clkr.hw, 3469 }, 3470 .num_parents = 1, 3471 .ops = &clk_branch2_ops, 3472 .flags = CLK_SET_RATE_PARENT, 3473 } 3474 } 3475 }; 3476 3477 static struct clk_branch gcc_pdm_ahb_clk = { 3478 .halt_reg = 0x44004, 3479 .halt_check = BRANCH_HALT, 3480 .clkr = { 3481 .enable_reg = 0x44004, 3482 .enable_mask = BIT(0), 3483 .hw.init = &(struct clk_init_data) { 3484 .name = "gcc_pdm_ahb_clk", 3485 .ops = &clk_branch2_ops, 3486 } 3487 } 3488 }; 3489 3490 static struct clk_branch gcc_prng_ahb_clk = { 3491 .halt_reg = 0x13004, 3492 .halt_check = BRANCH_HALT_VOTED, 3493 .clkr = { 3494 .enable_reg = 0x45004, 3495 .enable_mask = BIT(8), 3496 .hw.init = &(struct clk_init_data) { 3497 .name = "gcc_prng_ahb_clk", 3498 .ops = &clk_branch2_ops, 3499 } 3500 } 3501 }; 3502 3503 static struct clk_branch gcc_qdss_dap_clk = { 3504 .halt_reg = 0x29084, 3505 .halt_check = BRANCH_HALT_VOTED, 3506 .clkr = { 3507 .enable_reg = 0x45004, 3508 .enable_mask = BIT(11), 3509 .hw.init = &(struct clk_init_data) { 3510 .name = "gcc_qdss_dap_clk", 3511 .ops = &clk_branch2_ops, 3512 } 3513 } 3514 }; 3515 3516 static struct clk_branch gcc_qusb_ref_clk = { 3517 .halt_reg = 0, 3518 .halt_check = BRANCH_HALT_SKIP, 3519 .clkr = { 3520 .enable_reg = 0x41030, 3521 .enable_mask = BIT(0), 3522 .hw.init = &(struct clk_init_data) { 3523 .name = "gcc_qusb_ref_clk", 3524 .ops = &clk_branch2_ops, 3525 } 3526 } 3527 }; 3528 3529 static struct clk_branch gcc_rbcpr_gfx_clk = { 3530 .halt_reg = 0x3a004, 3531 .halt_check = BRANCH_HALT, 3532 .clkr = { 3533 .enable_reg = 0x3a004, 3534 .enable_mask = BIT(0), 3535 .hw.init = &(struct clk_init_data) { 3536 .name = "gcc_rbcpr_gfx_clk", 3537 .parent_hws = (const struct clk_hw*[]){ 3538 &rbcpr_gfx_clk_src.clkr.hw, 3539 }, 3540 .num_parents = 1, 3541 .ops = &clk_branch2_ops, 3542 .flags = CLK_SET_RATE_PARENT, 3543 } 3544 } 3545 }; 3546 3547 static struct clk_branch gcc_sdcc1_ice_core_clk = { 3548 .halt_reg = 0x5d014, 3549 .halt_check = BRANCH_HALT, 3550 .clkr = { 3551 .enable_reg = 0x5d014, 3552 .enable_mask = BIT(0), 3553 .hw.init = &(struct clk_init_data) { 3554 .name = "gcc_sdcc1_ice_core_clk", 3555 .parent_hws = (const struct clk_hw*[]){ 3556 &sdcc1_ice_core_clk_src.clkr.hw, 3557 }, 3558 .num_parents = 1, 3559 .ops = &clk_branch2_ops, 3560 .flags = CLK_SET_RATE_PARENT, 3561 } 3562 } 3563 }; 3564 3565 static struct clk_branch gcc_sdcc1_ahb_clk = { 3566 .halt_reg = 0x4201c, 3567 .halt_check = BRANCH_HALT, 3568 .clkr = { 3569 .enable_reg = 0x4201c, 3570 .enable_mask = BIT(0), 3571 .hw.init = &(struct clk_init_data) { 3572 .name = "gcc_sdcc1_ahb_clk", 3573 .ops = &clk_branch2_ops, 3574 } 3575 } 3576 }; 3577 3578 static struct clk_branch gcc_sdcc2_ahb_clk = { 3579 .halt_reg = 0x4301c, 3580 .halt_check = BRANCH_HALT, 3581 .clkr = { 3582 .enable_reg = 0x4301c, 3583 .enable_mask = BIT(0), 3584 .hw.init = &(struct clk_init_data) { 3585 .name = "gcc_sdcc2_ahb_clk", 3586 .ops = &clk_branch2_ops, 3587 } 3588 } 3589 }; 3590 3591 static struct clk_branch gcc_sdcc1_apps_clk = { 3592 .halt_reg = 0x42018, 3593 .halt_check = BRANCH_HALT, 3594 .clkr = { 3595 .enable_reg = 0x42018, 3596 .enable_mask = BIT(0), 3597 .hw.init = &(struct clk_init_data) { 3598 .name = "gcc_sdcc1_apps_clk", 3599 .parent_hws = (const struct clk_hw*[]){ 3600 &sdcc1_apps_clk_src.clkr.hw, 3601 }, 3602 .num_parents = 1, 3603 .ops = &clk_branch2_ops, 3604 .flags = CLK_SET_RATE_PARENT, 3605 } 3606 } 3607 }; 3608 3609 static struct clk_branch gcc_sdcc2_apps_clk = { 3610 .halt_reg = 0x43018, 3611 .halt_check = BRANCH_HALT, 3612 .clkr = { 3613 .enable_reg = 0x43018, 3614 .enable_mask = BIT(0), 3615 .hw.init = &(struct clk_init_data) { 3616 .name = "gcc_sdcc2_apps_clk", 3617 .parent_hws = (const struct clk_hw*[]){ 3618 &sdcc2_apps_clk_src.clkr.hw, 3619 }, 3620 .num_parents = 1, 3621 .ops = &clk_branch2_ops, 3622 .flags = CLK_SET_RATE_PARENT, 3623 } 3624 } 3625 }; 3626 3627 static struct clk_branch gcc_smmu_cfg_clk = { 3628 .halt_reg = 0x12038, 3629 .halt_check = BRANCH_HALT_VOTED, 3630 .clkr = { 3631 .enable_reg = 0x4500c, 3632 .enable_mask = BIT(12), 3633 .hw.init = &(struct clk_init_data) { 3634 .name = "gcc_smmu_cfg_clk", 3635 .ops = &clk_branch2_ops, 3636 } 3637 } 3638 }; 3639 3640 static struct clk_branch gcc_usb30_master_clk = { 3641 .halt_reg = 0x3f000, 3642 .halt_check = BRANCH_HALT, 3643 .clkr = { 3644 .enable_reg = 0x3f000, 3645 .enable_mask = BIT(0), 3646 .hw.init = &(struct clk_init_data) { 3647 .name = "gcc_usb30_master_clk", 3648 .parent_hws = (const struct clk_hw*[]){ 3649 &usb30_master_clk_src.clkr.hw, 3650 }, 3651 .num_parents = 1, 3652 .ops = &clk_branch2_ops, 3653 .flags = CLK_SET_RATE_PARENT, 3654 } 3655 } 3656 }; 3657 3658 static struct clk_branch gcc_usb30_mock_utmi_clk = { 3659 .halt_reg = 0x3f008, 3660 .halt_check = BRANCH_HALT, 3661 .clkr = { 3662 .enable_reg = 0x3f008, 3663 .enable_mask = BIT(0), 3664 .hw.init = &(struct clk_init_data) { 3665 .name = "gcc_usb30_mock_utmi_clk", 3666 .parent_hws = (const struct clk_hw*[]){ 3667 &usb30_mock_utmi_clk_src.clkr.hw, 3668 }, 3669 .num_parents = 1, 3670 .ops = &clk_branch2_ops, 3671 .flags = CLK_SET_RATE_PARENT, 3672 } 3673 } 3674 }; 3675 3676 static struct clk_branch gcc_usb30_sleep_clk = { 3677 .halt_reg = 0x3f004, 3678 .halt_check = BRANCH_HALT, 3679 .clkr = { 3680 .enable_reg = 0x3f004, 3681 .enable_mask = BIT(0), 3682 .hw.init = &(struct clk_init_data) { 3683 .name = "gcc_usb30_sleep_clk", 3684 .ops = &clk_branch2_ops, 3685 } 3686 } 3687 }; 3688 3689 static struct clk_branch gcc_usb3_aux_clk = { 3690 .halt_reg = 0x3f044, 3691 .halt_check = BRANCH_HALT, 3692 .clkr = { 3693 .enable_reg = 0x3f044, 3694 .enable_mask = BIT(0), 3695 .hw.init = &(struct clk_init_data) { 3696 .name = "gcc_usb3_aux_clk", 3697 .parent_hws = (const struct clk_hw*[]){ 3698 &usb3_aux_clk_src.clkr.hw, 3699 }, 3700 .num_parents = 1, 3701 .ops = &clk_branch2_ops, 3702 .flags = CLK_SET_RATE_PARENT, 3703 } 3704 } 3705 }; 3706 3707 static struct clk_branch gcc_usb3_pipe_clk = { 3708 .halt_reg = 0, 3709 .halt_check = BRANCH_HALT_DELAY, 3710 .clkr = { 3711 .enable_reg = 0x3f040, 3712 .enable_mask = BIT(0), 3713 .hw.init = &(struct clk_init_data) { 3714 .name = "gcc_usb3_pipe_clk", 3715 .ops = &clk_branch2_ops, 3716 } 3717 } 3718 }; 3719 3720 static struct clk_branch gcc_usb_phy_cfg_ahb_clk = { 3721 .halt_reg = 0x3f080, 3722 .halt_check = BRANCH_VOTED, 3723 .clkr = { 3724 .enable_reg = 0x3f080, 3725 .enable_mask = BIT(0), 3726 .hw.init = &(struct clk_init_data) { 3727 .name = "gcc_usb_phy_cfg_ahb_clk", 3728 .ops = &clk_branch2_ops, 3729 } 3730 } 3731 }; 3732 3733 static struct clk_branch gcc_usb_ss_ref_clk = { 3734 .halt_reg = 0, 3735 .halt_check = BRANCH_HALT_SKIP, 3736 .clkr = { 3737 .enable_reg = 0x3f07c, 3738 .enable_mask = BIT(0), 3739 .hw.init = &(struct clk_init_data) { 3740 .name = "gcc_usb_ss_ref_clk", 3741 .ops = &clk_branch2_ops, 3742 } 3743 } 3744 }; 3745 3746 static struct clk_branch gcc_venus0_ahb_clk = { 3747 .halt_reg = 0x4c020, 3748 .halt_check = BRANCH_HALT, 3749 .clkr = { 3750 .enable_reg = 0x4c020, 3751 .enable_mask = BIT(0), 3752 .hw.init = &(struct clk_init_data) { 3753 .name = "gcc_venus0_ahb_clk", 3754 .ops = &clk_branch2_ops, 3755 } 3756 } 3757 }; 3758 3759 static struct clk_branch gcc_venus0_axi_clk = { 3760 .halt_reg = 0x4c024, 3761 .halt_check = BRANCH_HALT, 3762 .clkr = { 3763 .enable_reg = 0x4c024, 3764 .enable_mask = BIT(0), 3765 .hw.init = &(struct clk_init_data) { 3766 .name = "gcc_venus0_axi_clk", 3767 .ops = &clk_branch2_ops, 3768 } 3769 } 3770 }; 3771 3772 static struct clk_branch gcc_venus0_core0_vcodec0_clk = { 3773 .halt_reg = 0x4c02c, 3774 .halt_check = BRANCH_HALT, 3775 .clkr = { 3776 .enable_reg = 0x4c02c, 3777 .enable_mask = BIT(0), 3778 .hw.init = &(struct clk_init_data) { 3779 .name = "gcc_venus0_core0_vcodec0_clk", 3780 .parent_hws = (const struct clk_hw*[]){ 3781 &vcodec0_clk_src.clkr.hw, 3782 }, 3783 .num_parents = 1, 3784 .ops = &clk_branch2_ops, 3785 .flags = CLK_SET_RATE_PARENT, 3786 } 3787 } 3788 }; 3789 3790 static struct clk_branch gcc_venus0_vcodec0_clk = { 3791 .halt_reg = 0x4c01c, 3792 .halt_check = BRANCH_HALT, 3793 .clkr = { 3794 .enable_reg = 0x4c01c, 3795 .enable_mask = BIT(0), 3796 .hw.init = &(struct clk_init_data) { 3797 .name = "gcc_venus0_vcodec0_clk", 3798 .parent_hws = (const struct clk_hw*[]){ 3799 &vcodec0_clk_src.clkr.hw, 3800 }, 3801 .num_parents = 1, 3802 .ops = &clk_branch2_ops, 3803 .flags = CLK_SET_RATE_PARENT, 3804 } 3805 } 3806 }; 3807 3808 static struct clk_branch gcc_venus_tbu_clk = { 3809 .halt_reg = 0x12014, 3810 .halt_check = BRANCH_HALT_VOTED, 3811 .clkr = { 3812 .enable_reg = 0x4500c, 3813 .enable_mask = BIT(5), 3814 .hw.init = &(struct clk_init_data) { 3815 .name = "gcc_venus_tbu_clk", 3816 .ops = &clk_branch2_ops, 3817 } 3818 } 3819 }; 3820 3821 static struct clk_branch gcc_vfe1_tbu_clk = { 3822 .halt_reg = 0x12090, 3823 .halt_check = BRANCH_HALT_VOTED, 3824 .clkr = { 3825 .enable_reg = 0x4500c, 3826 .enable_mask = BIT(17), 3827 .hw.init = &(struct clk_init_data) { 3828 .name = "gcc_vfe1_tbu_clk", 3829 .ops = &clk_branch2_ops, 3830 } 3831 } 3832 }; 3833 3834 static struct clk_branch gcc_vfe_tbu_clk = { 3835 .halt_reg = 0x1203c, 3836 .halt_check = BRANCH_HALT_VOTED, 3837 .clkr = { 3838 .enable_reg = 0x4500c, 3839 .enable_mask = BIT(9), 3840 .hw.init = &(struct clk_init_data) { 3841 .name = "gcc_vfe_tbu_clk", 3842 .ops = &clk_branch2_ops, 3843 } 3844 } 3845 }; 3846 3847 static struct gdsc usb30_gdsc = { 3848 .gdscr = 0x3f078, 3849 .pd = { 3850 .name = "usb30_gdsc", 3851 }, 3852 .pwrsts = PWRSTS_OFF_ON, 3853 /* 3854 * FIXME: dwc3 usb gadget cannot resume after GDSC power off 3855 * dwc3 7000000.dwc3: failed to enable ep0out 3856 */ 3857 .flags = ALWAYS_ON, 3858 }; 3859 3860 static struct gdsc venus_gdsc = { 3861 .gdscr = 0x4c018, 3862 .cxcs = (unsigned int []){ 0x4c024, 0x4c01c }, 3863 .cxc_count = 2, 3864 .pd = { 3865 .name = "venus_gdsc", 3866 }, 3867 .pwrsts = PWRSTS_OFF_ON, 3868 }; 3869 3870 static struct gdsc venus_core0_gdsc = { 3871 .gdscr = 0x4c028, 3872 .cxcs = (unsigned int []){ 0x4c02c }, 3873 .cxc_count = 1, 3874 .pd = { 3875 .name = "venus_core0", 3876 }, 3877 .flags = HW_CTRL, 3878 .pwrsts = PWRSTS_OFF_ON, 3879 }; 3880 3881 static struct gdsc mdss_gdsc = { 3882 .gdscr = 0x4d078, 3883 .cxcs = (unsigned int []){ 0x4d080, 0x4d088 }, 3884 .cxc_count = 2, 3885 .pd = { 3886 .name = "mdss_gdsc", 3887 }, 3888 .pwrsts = PWRSTS_OFF_ON, 3889 }; 3890 3891 static struct gdsc jpeg_gdsc = { 3892 .gdscr = 0x5701c, 3893 .cxcs = (unsigned int []){ 0x57020, 0x57028 }, 3894 .cxc_count = 2, 3895 .pd = { 3896 .name = "jpeg_gdsc", 3897 }, 3898 .pwrsts = PWRSTS_OFF_ON, 3899 }; 3900 3901 static struct gdsc vfe0_gdsc = { 3902 .gdscr = 0x58034, 3903 .cxcs = (unsigned int []){ 0x58038, 0x58048, 0x5600c, 0x58050 }, 3904 .cxc_count = 4, 3905 .pd = { 3906 .name = "vfe0_gdsc", 3907 }, 3908 .pwrsts = PWRSTS_OFF_ON, 3909 }; 3910 3911 static struct gdsc vfe1_gdsc = { 3912 .gdscr = 0x5806c, 3913 .cxcs = (unsigned int []){ 0x5805c, 0x58068, 0x5600c, 0x58074 }, 3914 .cxc_count = 4, 3915 .pd = { 3916 .name = "vfe1_gdsc", 3917 }, 3918 .pwrsts = PWRSTS_OFF_ON, 3919 }; 3920 3921 static struct gdsc oxili_gx_gdsc = { 3922 .gdscr = 0x5901c, 3923 .clamp_io_ctrl = 0x5b00c, 3924 .cxcs = (unsigned int []){ 0x59000, 0x59024 }, 3925 .cxc_count = 2, 3926 .pd = { 3927 .name = "oxili_gx_gdsc", 3928 }, 3929 .pwrsts = PWRSTS_OFF_ON, 3930 .flags = CLAMP_IO, 3931 }; 3932 3933 static struct gdsc oxili_cx_gdsc = { 3934 .gdscr = 0x5904c, 3935 .cxcs = (unsigned int []){ 0x59020 }, 3936 .cxc_count = 1, 3937 .pd = { 3938 .name = "oxili_cx_gdsc", 3939 }, 3940 .pwrsts = PWRSTS_OFF_ON, 3941 }; 3942 3943 static struct gdsc cpp_gdsc = { 3944 .gdscr = 0x58078, 3945 .cxcs = (unsigned int []){ 0x5803c, 0x58064 }, 3946 .cxc_count = 2, 3947 .pd = { 3948 .name = "cpp_gdsc", 3949 }, 3950 .flags = ALWAYS_ON, 3951 .pwrsts = PWRSTS_OFF_ON, 3952 }; 3953 3954 static struct clk_hw *gcc_msm8953_hws[] = { 3955 &gpll0_early_div.hw, 3956 &gpll6_early_div.hw, 3957 }; 3958 3959 static struct clk_regmap *gcc_msm8953_clocks[] = { 3960 [GPLL0] = &gpll0.clkr, 3961 [GPLL0_EARLY] = &gpll0_early.clkr, 3962 [GPLL2] = &gpll2.clkr, 3963 [GPLL2_EARLY] = &gpll2_early.clkr, 3964 [GPLL3] = &gpll3.clkr, 3965 [GPLL3_EARLY] = &gpll3_early.clkr, 3966 [GPLL4] = &gpll4.clkr, 3967 [GPLL4_EARLY] = &gpll4_early.clkr, 3968 [GPLL6] = &gpll6.clkr, 3969 [GPLL6_EARLY] = &gpll6_early.clkr, 3970 [GCC_APSS_AHB_CLK] = &gcc_apss_ahb_clk.clkr, 3971 [GCC_APSS_AXI_CLK] = &gcc_apss_axi_clk.clkr, 3972 [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr, 3973 [GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr, 3974 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr, 3975 [GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr, 3976 [GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr, 3977 [GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr, 3978 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr, 3979 [GCC_QDSS_DAP_CLK] = &gcc_qdss_dap_clk.clkr, 3980 [GCC_APSS_TCU_ASYNC_CLK] = &gcc_apss_tcu_async_clk.clkr, 3981 [GCC_CPP_TBU_CLK] = &gcc_cpp_tbu_clk.clkr, 3982 [GCC_JPEG_TBU_CLK] = &gcc_jpeg_tbu_clk.clkr, 3983 [GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr, 3984 [GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr, 3985 [GCC_VENUS_TBU_CLK] = &gcc_venus_tbu_clk.clkr, 3986 [GCC_VFE1_TBU_CLK] = &gcc_vfe1_tbu_clk.clkr, 3987 [GCC_VFE_TBU_CLK] = &gcc_vfe_tbu_clk.clkr, 3988 [CAMSS_TOP_AHB_CLK_SRC] = &camss_top_ahb_clk_src.clkr, 3989 [CSI0_CLK_SRC] = &csi0_clk_src.clkr, 3990 [APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr, 3991 [CSI1_CLK_SRC] = &csi1_clk_src.clkr, 3992 [CSI2_CLK_SRC] = &csi2_clk_src.clkr, 3993 [VFE0_CLK_SRC] = &vfe0_clk_src.clkr, 3994 [VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr, 3995 [CPP_CLK_SRC] = &cpp_clk_src.clkr, 3996 [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr, 3997 [USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr, 3998 [VFE1_CLK_SRC] = &vfe1_clk_src.clkr, 3999 [APC0_DROOP_DETECTOR_CLK_SRC] = &apc0_droop_detector_clk_src.clkr, 4000 [APC1_DROOP_DETECTOR_CLK_SRC] = &apc1_droop_detector_clk_src.clkr, 4001 [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr, 4002 [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr, 4003 [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr, 4004 [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr, 4005 [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr, 4006 [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr, 4007 [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr, 4008 [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr, 4009 [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr, 4010 [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr, 4011 [BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr, 4012 [BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr, 4013 [BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr, 4014 [BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr, 4015 [BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr, 4016 [BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr, 4017 [BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr, 4018 [BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr, 4019 [BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr, 4020 [BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr, 4021 [CCI_CLK_SRC] = &cci_clk_src.clkr, 4022 [CSI0P_CLK_SRC] = &csi0p_clk_src.clkr, 4023 [CSI1P_CLK_SRC] = &csi1p_clk_src.clkr, 4024 [CSI2P_CLK_SRC] = &csi2p_clk_src.clkr, 4025 [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr, 4026 [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr, 4027 [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr, 4028 [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr, 4029 [MCLK2_CLK_SRC] = &mclk2_clk_src.clkr, 4030 [MCLK3_CLK_SRC] = &mclk3_clk_src.clkr, 4031 [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr, 4032 [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr, 4033 [CSI2PHYTIMER_CLK_SRC] = &csi2phytimer_clk_src.clkr, 4034 [CRYPTO_CLK_SRC] = &crypto_clk_src.clkr, 4035 [GP1_CLK_SRC] = &gp1_clk_src.clkr, 4036 [GP2_CLK_SRC] = &gp2_clk_src.clkr, 4037 [GP3_CLK_SRC] = &gp3_clk_src.clkr, 4038 [PDM2_CLK_SRC] = &pdm2_clk_src.clkr, 4039 [RBCPR_GFX_CLK_SRC] = &rbcpr_gfx_clk_src.clkr, 4040 [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr, 4041 [SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr, 4042 [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr, 4043 [USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr, 4044 [USB3_AUX_CLK_SRC] = &usb3_aux_clk_src.clkr, 4045 [GCC_APC0_DROOP_DETECTOR_GPLL0_CLK] = &gcc_apc0_droop_detector_gpll0_clk.clkr, 4046 [GCC_APC1_DROOP_DETECTOR_GPLL0_CLK] = &gcc_apc1_droop_detector_gpll0_clk.clkr, 4047 [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr, 4048 [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr, 4049 [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr, 4050 [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr, 4051 [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr, 4052 [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr, 4053 [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr, 4054 [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr, 4055 [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr, 4056 [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr, 4057 [GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr, 4058 [GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr, 4059 [GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr, 4060 [GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr, 4061 [GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr, 4062 [GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr, 4063 [GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr, 4064 [GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr, 4065 [GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr, 4066 [GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr, 4067 [GCC_CAMSS_CCI_AHB_CLK] = &gcc_camss_cci_ahb_clk.clkr, 4068 [GCC_CAMSS_CCI_CLK] = &gcc_camss_cci_clk.clkr, 4069 [GCC_CAMSS_CPP_AHB_CLK] = &gcc_camss_cpp_ahb_clk.clkr, 4070 [GCC_CAMSS_CPP_AXI_CLK] = &gcc_camss_cpp_axi_clk.clkr, 4071 [GCC_CAMSS_CPP_CLK] = &gcc_camss_cpp_clk.clkr, 4072 [GCC_CAMSS_CSI0_AHB_CLK] = &gcc_camss_csi0_ahb_clk.clkr, 4073 [GCC_CAMSS_CSI0_CLK] = &gcc_camss_csi0_clk.clkr, 4074 [GCC_CAMSS_CSI0_CSIPHY_3P_CLK] = &gcc_camss_csi0_csiphy_3p_clk.clkr, 4075 [GCC_CAMSS_CSI0PHY_CLK] = &gcc_camss_csi0phy_clk.clkr, 4076 [GCC_CAMSS_CSI0PIX_CLK] = &gcc_camss_csi0pix_clk.clkr, 4077 [GCC_CAMSS_CSI0RDI_CLK] = &gcc_camss_csi0rdi_clk.clkr, 4078 [GCC_CAMSS_CSI1_AHB_CLK] = &gcc_camss_csi1_ahb_clk.clkr, 4079 [GCC_CAMSS_CSI1_CLK] = &gcc_camss_csi1_clk.clkr, 4080 [GCC_CAMSS_CSI1_CSIPHY_3P_CLK] = &gcc_camss_csi1_csiphy_3p_clk.clkr, 4081 [GCC_CAMSS_CSI1PHY_CLK] = &gcc_camss_csi1phy_clk.clkr, 4082 [GCC_CAMSS_CSI1PIX_CLK] = &gcc_camss_csi1pix_clk.clkr, 4083 [GCC_CAMSS_CSI1RDI_CLK] = &gcc_camss_csi1rdi_clk.clkr, 4084 [GCC_CAMSS_CSI2_AHB_CLK] = &gcc_camss_csi2_ahb_clk.clkr, 4085 [GCC_CAMSS_CSI2_CLK] = &gcc_camss_csi2_clk.clkr, 4086 [GCC_CAMSS_CSI2_CSIPHY_3P_CLK] = &gcc_camss_csi2_csiphy_3p_clk.clkr, 4087 [GCC_CAMSS_CSI2PHY_CLK] = &gcc_camss_csi2phy_clk.clkr, 4088 [GCC_CAMSS_CSI2PIX_CLK] = &gcc_camss_csi2pix_clk.clkr, 4089 [GCC_CAMSS_CSI2RDI_CLK] = &gcc_camss_csi2rdi_clk.clkr, 4090 [GCC_CAMSS_CSI_VFE0_CLK] = &gcc_camss_csi_vfe0_clk.clkr, 4091 [GCC_CAMSS_CSI_VFE1_CLK] = &gcc_camss_csi_vfe1_clk.clkr, 4092 [GCC_CAMSS_GP0_CLK] = &gcc_camss_gp0_clk.clkr, 4093 [GCC_CAMSS_GP1_CLK] = &gcc_camss_gp1_clk.clkr, 4094 [GCC_CAMSS_ISPIF_AHB_CLK] = &gcc_camss_ispif_ahb_clk.clkr, 4095 [GCC_CAMSS_JPEG0_CLK] = &gcc_camss_jpeg0_clk.clkr, 4096 [GCC_CAMSS_JPEG_AHB_CLK] = &gcc_camss_jpeg_ahb_clk.clkr, 4097 [GCC_CAMSS_JPEG_AXI_CLK] = &gcc_camss_jpeg_axi_clk.clkr, 4098 [GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr, 4099 [GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr, 4100 [GCC_CAMSS_MCLK2_CLK] = &gcc_camss_mclk2_clk.clkr, 4101 [GCC_CAMSS_MCLK3_CLK] = &gcc_camss_mclk3_clk.clkr, 4102 [GCC_CAMSS_MICRO_AHB_CLK] = &gcc_camss_micro_ahb_clk.clkr, 4103 [GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr, 4104 [GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr, 4105 [GCC_CAMSS_CSI2PHYTIMER_CLK] = &gcc_camss_csi2phytimer_clk.clkr, 4106 [GCC_CAMSS_AHB_CLK] = &gcc_camss_ahb_clk.clkr, 4107 [GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr, 4108 [GCC_CAMSS_VFE0_CLK] = &gcc_camss_vfe0_clk.clkr, 4109 [GCC_CAMSS_VFE0_AHB_CLK] = &gcc_camss_vfe0_ahb_clk.clkr, 4110 [GCC_CAMSS_VFE0_AXI_CLK] = &gcc_camss_vfe0_axi_clk.clkr, 4111 [GCC_CAMSS_VFE1_AHB_CLK] = &gcc_camss_vfe1_ahb_clk.clkr, 4112 [GCC_CAMSS_VFE1_AXI_CLK] = &gcc_camss_vfe1_axi_clk.clkr, 4113 [GCC_CAMSS_VFE1_CLK] = &gcc_camss_vfe1_clk.clkr, 4114 [GCC_DCC_CLK] = &gcc_dcc_clk.clkr, 4115 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr, 4116 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr, 4117 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr, 4118 [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr, 4119 [GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr, 4120 [GCC_PCNOC_USB3_AXI_CLK] = &gcc_pcnoc_usb3_axi_clk.clkr, 4121 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr, 4122 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr, 4123 [GCC_RBCPR_GFX_CLK] = &gcc_rbcpr_gfx_clk.clkr, 4124 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr, 4125 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr, 4126 [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr, 4127 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr, 4128 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr, 4129 [GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr, 4130 [GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr, 4131 [GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr, 4132 [GCC_USB3_AUX_CLK] = &gcc_usb3_aux_clk.clkr, 4133 [GCC_USB_PHY_CFG_AHB_CLK] = &gcc_usb_phy_cfg_ahb_clk.clkr, 4134 [GCC_VENUS0_AHB_CLK] = &gcc_venus0_ahb_clk.clkr, 4135 [GCC_VENUS0_AXI_CLK] = &gcc_venus0_axi_clk.clkr, 4136 [GCC_VENUS0_CORE0_VCODEC0_CLK] = &gcc_venus0_core0_vcodec0_clk.clkr, 4137 [GCC_VENUS0_VCODEC0_CLK] = &gcc_venus0_vcodec0_clk.clkr, 4138 [GCC_QUSB_REF_CLK] = &gcc_qusb_ref_clk.clkr, 4139 [GCC_USB_SS_REF_CLK] = &gcc_usb_ss_ref_clk.clkr, 4140 [GCC_USB3_PIPE_CLK] = &gcc_usb3_pipe_clk.clkr, 4141 [MDP_CLK_SRC] = &mdp_clk_src.clkr, 4142 [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr, 4143 [BYTE0_CLK_SRC] = &byte0_clk_src.clkr, 4144 [ESC0_CLK_SRC] = &esc0_clk_src.clkr, 4145 [PCLK1_CLK_SRC] = &pclk1_clk_src.clkr, 4146 [BYTE1_CLK_SRC] = &byte1_clk_src.clkr, 4147 [ESC1_CLK_SRC] = &esc1_clk_src.clkr, 4148 [VSYNC_CLK_SRC] = &vsync_clk_src.clkr, 4149 [GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr, 4150 [GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr, 4151 [GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr, 4152 [GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr, 4153 [GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr, 4154 [GCC_MDSS_PCLK1_CLK] = &gcc_mdss_pclk1_clk.clkr, 4155 [GCC_MDSS_BYTE1_CLK] = &gcc_mdss_byte1_clk.clkr, 4156 [GCC_MDSS_ESC1_CLK] = &gcc_mdss_esc1_clk.clkr, 4157 [GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr, 4158 [GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr, 4159 [GCC_OXILI_TIMER_CLK] = &gcc_oxili_timer_clk.clkr, 4160 [GCC_OXILI_GFX3D_CLK] = &gcc_oxili_gfx3d_clk.clkr, 4161 [GCC_OXILI_AON_CLK] = &gcc_oxili_aon_clk.clkr, 4162 [GCC_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr, 4163 [GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr, 4164 [GCC_BIMC_GPU_CLK] = &gcc_bimc_gpu_clk.clkr, 4165 [GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr, 4166 }; 4167 4168 static const struct qcom_reset_map gcc_msm8953_resets[] = { 4169 [GCC_CAMSS_MICRO_BCR] = { 0x56008 }, 4170 [GCC_MSS_BCR] = { 0x71000 }, 4171 [GCC_QUSB2_PHY_BCR] = { 0x4103c }, 4172 [GCC_USB3PHY_PHY_BCR] = { 0x3f03c }, 4173 [GCC_USB3_PHY_BCR] = { 0x3f034 }, 4174 [GCC_USB_30_BCR] = { 0x3f070 }, 4175 }; 4176 4177 static const struct regmap_config gcc_msm8953_regmap_config = { 4178 .reg_bits = 32, 4179 .reg_stride = 4, 4180 .val_bits = 32, 4181 .max_register = 0x80000, 4182 .fast_io = true, 4183 }; 4184 4185 static struct gdsc *gcc_msm8953_gdscs[] = { 4186 [CPP_GDSC] = &cpp_gdsc, 4187 [JPEG_GDSC] = &jpeg_gdsc, 4188 [MDSS_GDSC] = &mdss_gdsc, 4189 [OXILI_CX_GDSC] = &oxili_cx_gdsc, 4190 [OXILI_GX_GDSC] = &oxili_gx_gdsc, 4191 [USB30_GDSC] = &usb30_gdsc, 4192 [VENUS_CORE0_GDSC] = &venus_core0_gdsc, 4193 [VENUS_GDSC] = &venus_gdsc, 4194 [VFE0_GDSC] = &vfe0_gdsc, 4195 [VFE1_GDSC] = &vfe1_gdsc, 4196 }; 4197 4198 static const struct qcom_cc_desc gcc_msm8953_desc = { 4199 .config = &gcc_msm8953_regmap_config, 4200 .clks = gcc_msm8953_clocks, 4201 .num_clks = ARRAY_SIZE(gcc_msm8953_clocks), 4202 .resets = gcc_msm8953_resets, 4203 .num_resets = ARRAY_SIZE(gcc_msm8953_resets), 4204 .gdscs = gcc_msm8953_gdscs, 4205 .num_gdscs = ARRAY_SIZE(gcc_msm8953_gdscs), 4206 .clk_hws = gcc_msm8953_hws, 4207 .num_clk_hws = ARRAY_SIZE(gcc_msm8953_hws), 4208 }; 4209 4210 static int gcc_msm8953_probe(struct platform_device *pdev) 4211 { 4212 struct regmap *regmap; 4213 4214 regmap = qcom_cc_map(pdev, &gcc_msm8953_desc); 4215 if (IS_ERR(regmap)) 4216 return PTR_ERR(regmap); 4217 4218 clk_alpha_pll_configure(&gpll3_early, regmap, &gpll3_early_config); 4219 4220 return qcom_cc_really_probe(pdev, &gcc_msm8953_desc, regmap); 4221 } 4222 4223 static const struct of_device_id gcc_msm8953_match_table[] = { 4224 { .compatible = "qcom,gcc-msm8953" }, 4225 {}, 4226 }; 4227 4228 static struct platform_driver gcc_msm8953_driver = { 4229 .probe = gcc_msm8953_probe, 4230 .driver = { 4231 .name = "gcc-msm8953", 4232 .of_match_table = gcc_msm8953_match_table, 4233 .owner = THIS_MODULE, 4234 }, 4235 }; 4236 4237 static int __init gcc_msm8953_init(void) 4238 { 4239 return platform_driver_register(&gcc_msm8953_driver); 4240 } 4241 core_initcall(gcc_msm8953_init); 4242 4243 static void __exit gcc_msm8953_exit(void) 4244 { 4245 platform_driver_unregister(&gcc_msm8953_driver); 4246 } 4247 module_exit(gcc_msm8953_exit); 4248 4249 MODULE_DESCRIPTION("Qualcomm GCC MSM8953 Driver"); 4250 MODULE_LICENSE("GPL v2"); 4251