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