1 // SPDX-License-Identifier: GPL-2.0-only 2 /*x 3 * Copyright (c) 2015, The Linux Foundation. All rights reserved. 4 */ 5 6 #include <linux/kernel.h> 7 #include <linux/bitops.h> 8 #include <linux/err.h> 9 #include <linux/platform_device.h> 10 #include <linux/module.h> 11 #include <linux/clk-provider.h> 12 #include <linux/regmap.h> 13 14 #include <dt-bindings/clock/qcom,mmcc-msm8996.h> 15 16 #include "common.h" 17 #include "clk-regmap.h" 18 #include "clk-regmap-divider.h" 19 #include "clk-alpha-pll.h" 20 #include "clk-rcg.h" 21 #include "clk-branch.h" 22 #include "reset.h" 23 #include "gdsc.h" 24 25 enum { 26 P_XO, 27 P_MMPLL0, 28 P_GPLL0, 29 P_GPLL0_DIV, 30 P_MMPLL1, 31 P_MMPLL9, 32 P_MMPLL2, 33 P_MMPLL8, 34 P_MMPLL3, 35 P_DSI0PLL, 36 P_DSI1PLL, 37 P_MMPLL5, 38 P_HDMIPLL, 39 P_DSI0PLL_BYTE, 40 P_DSI1PLL_BYTE, 41 P_MMPLL4, 42 }; 43 44 static struct clk_fixed_factor gpll0_div = { 45 .mult = 1, 46 .div = 2, 47 .hw.init = &(struct clk_init_data){ 48 .name = "gpll0_div", 49 .parent_data = (const struct clk_parent_data[]){ 50 { .fw_name = "gpll0", .name = "gpll0" }, 51 }, 52 .num_parents = 1, 53 .ops = &clk_fixed_factor_ops, 54 }, 55 }; 56 57 static const struct pll_vco mmpll_p_vco[] = { 58 { 250000000, 500000000, 3 }, 59 { 500000000, 1000000000, 2 }, 60 { 1000000000, 1500000000, 1 }, 61 { 1500000000, 2000000000, 0 }, 62 }; 63 64 static const struct pll_vco mmpll_gfx_vco[] = { 65 { 400000000, 1000000000, 2 }, 66 { 1000000000, 1500000000, 1 }, 67 { 1500000000, 2000000000, 0 }, 68 }; 69 70 static const struct pll_vco mmpll_t_vco[] = { 71 { 500000000, 1500000000, 0 }, 72 }; 73 74 static struct clk_alpha_pll mmpll0_early = { 75 .offset = 0x0, 76 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 77 .vco_table = mmpll_p_vco, 78 .num_vco = ARRAY_SIZE(mmpll_p_vco), 79 .clkr = { 80 .enable_reg = 0x100, 81 .enable_mask = BIT(0), 82 .hw.init = &(struct clk_init_data){ 83 .name = "mmpll0_early", 84 .parent_data = (const struct clk_parent_data[]){ 85 { .fw_name = "xo", .name = "xo_board" }, 86 }, 87 .num_parents = 1, 88 .ops = &clk_alpha_pll_ops, 89 }, 90 }, 91 }; 92 93 static struct clk_alpha_pll_postdiv mmpll0 = { 94 .offset = 0x0, 95 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 96 .width = 4, 97 .clkr.hw.init = &(struct clk_init_data){ 98 .name = "mmpll0", 99 .parent_hws = (const struct clk_hw*[]){ 100 &mmpll0_early.clkr.hw 101 }, 102 .num_parents = 1, 103 .ops = &clk_alpha_pll_postdiv_ops, 104 .flags = CLK_SET_RATE_PARENT, 105 }, 106 }; 107 108 static struct clk_alpha_pll mmpll1_early = { 109 .offset = 0x30, 110 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 111 .vco_table = mmpll_p_vco, 112 .num_vco = ARRAY_SIZE(mmpll_p_vco), 113 .clkr = { 114 .enable_reg = 0x100, 115 .enable_mask = BIT(1), 116 .hw.init = &(struct clk_init_data){ 117 .name = "mmpll1_early", 118 .parent_data = (const struct clk_parent_data[]){ 119 { .fw_name = "xo", .name = "xo_board" }, 120 }, 121 .num_parents = 1, 122 .ops = &clk_alpha_pll_ops, 123 } 124 }, 125 }; 126 127 static struct clk_alpha_pll_postdiv mmpll1 = { 128 .offset = 0x30, 129 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 130 .width = 4, 131 .clkr.hw.init = &(struct clk_init_data){ 132 .name = "mmpll1", 133 .parent_hws = (const struct clk_hw*[]){ 134 &mmpll1_early.clkr.hw 135 }, 136 .num_parents = 1, 137 .ops = &clk_alpha_pll_postdiv_ops, 138 .flags = CLK_SET_RATE_PARENT, 139 }, 140 }; 141 142 static struct clk_alpha_pll mmpll2_early = { 143 .offset = 0x4100, 144 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 145 .vco_table = mmpll_gfx_vco, 146 .num_vco = ARRAY_SIZE(mmpll_gfx_vco), 147 .clkr.hw.init = &(struct clk_init_data){ 148 .name = "mmpll2_early", 149 .parent_data = (const struct clk_parent_data[]){ 150 { .fw_name = "xo", .name = "xo_board" }, 151 }, 152 .num_parents = 1, 153 .ops = &clk_alpha_pll_ops, 154 }, 155 }; 156 157 static struct clk_alpha_pll_postdiv mmpll2 = { 158 .offset = 0x4100, 159 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 160 .width = 4, 161 .clkr.hw.init = &(struct clk_init_data){ 162 .name = "mmpll2", 163 .parent_hws = (const struct clk_hw*[]){ 164 &mmpll2_early.clkr.hw 165 }, 166 .num_parents = 1, 167 .ops = &clk_alpha_pll_postdiv_ops, 168 .flags = CLK_SET_RATE_PARENT, 169 }, 170 }; 171 172 static struct clk_alpha_pll mmpll3_early = { 173 .offset = 0x60, 174 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 175 .vco_table = mmpll_p_vco, 176 .num_vco = ARRAY_SIZE(mmpll_p_vco), 177 .clkr.hw.init = &(struct clk_init_data){ 178 .name = "mmpll3_early", 179 .parent_data = (const struct clk_parent_data[]){ 180 { .fw_name = "xo", .name = "xo_board" }, 181 }, 182 .num_parents = 1, 183 .ops = &clk_alpha_pll_ops, 184 }, 185 }; 186 187 static struct clk_alpha_pll_postdiv mmpll3 = { 188 .offset = 0x60, 189 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 190 .width = 4, 191 .clkr.hw.init = &(struct clk_init_data){ 192 .name = "mmpll3", 193 .parent_hws = (const struct clk_hw*[]){ 194 &mmpll3_early.clkr.hw 195 }, 196 .num_parents = 1, 197 .ops = &clk_alpha_pll_postdiv_ops, 198 .flags = CLK_SET_RATE_PARENT, 199 }, 200 }; 201 202 static struct clk_alpha_pll mmpll4_early = { 203 .offset = 0x90, 204 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 205 .vco_table = mmpll_t_vco, 206 .num_vco = ARRAY_SIZE(mmpll_t_vco), 207 .clkr.hw.init = &(struct clk_init_data){ 208 .name = "mmpll4_early", 209 .parent_data = (const struct clk_parent_data[]){ 210 { .fw_name = "xo", .name = "xo_board" }, 211 }, 212 .num_parents = 1, 213 .ops = &clk_alpha_pll_ops, 214 }, 215 }; 216 217 static struct clk_alpha_pll_postdiv mmpll4 = { 218 .offset = 0x90, 219 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 220 .width = 2, 221 .clkr.hw.init = &(struct clk_init_data){ 222 .name = "mmpll4", 223 .parent_hws = (const struct clk_hw*[]){ 224 &mmpll4_early.clkr.hw 225 }, 226 .num_parents = 1, 227 .ops = &clk_alpha_pll_postdiv_ops, 228 .flags = CLK_SET_RATE_PARENT, 229 }, 230 }; 231 232 static struct clk_alpha_pll mmpll5_early = { 233 .offset = 0xc0, 234 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 235 .vco_table = mmpll_p_vco, 236 .num_vco = ARRAY_SIZE(mmpll_p_vco), 237 .clkr.hw.init = &(struct clk_init_data){ 238 .name = "mmpll5_early", 239 .parent_data = (const struct clk_parent_data[]){ 240 { .fw_name = "xo", .name = "xo_board" }, 241 }, 242 .num_parents = 1, 243 .ops = &clk_alpha_pll_ops, 244 }, 245 }; 246 247 static struct clk_alpha_pll_postdiv mmpll5 = { 248 .offset = 0xc0, 249 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 250 .width = 4, 251 .clkr.hw.init = &(struct clk_init_data){ 252 .name = "mmpll5", 253 .parent_hws = (const struct clk_hw*[]){ 254 &mmpll5_early.clkr.hw 255 }, 256 .num_parents = 1, 257 .ops = &clk_alpha_pll_postdiv_ops, 258 .flags = CLK_SET_RATE_PARENT, 259 }, 260 }; 261 262 static struct clk_alpha_pll mmpll8_early = { 263 .offset = 0x4130, 264 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 265 .vco_table = mmpll_gfx_vco, 266 .num_vco = ARRAY_SIZE(mmpll_gfx_vco), 267 .clkr.hw.init = &(struct clk_init_data){ 268 .name = "mmpll8_early", 269 .parent_data = (const struct clk_parent_data[]){ 270 { .fw_name = "xo", .name = "xo_board" }, 271 }, 272 .num_parents = 1, 273 .ops = &clk_alpha_pll_ops, 274 }, 275 }; 276 277 static struct clk_alpha_pll_postdiv mmpll8 = { 278 .offset = 0x4130, 279 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 280 .width = 4, 281 .clkr.hw.init = &(struct clk_init_data){ 282 .name = "mmpll8", 283 .parent_hws = (const struct clk_hw*[]){ 284 &mmpll8_early.clkr.hw 285 }, 286 .num_parents = 1, 287 .ops = &clk_alpha_pll_postdiv_ops, 288 .flags = CLK_SET_RATE_PARENT, 289 }, 290 }; 291 292 static struct clk_alpha_pll mmpll9_early = { 293 .offset = 0x4200, 294 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 295 .vco_table = mmpll_t_vco, 296 .num_vco = ARRAY_SIZE(mmpll_t_vco), 297 .clkr.hw.init = &(struct clk_init_data){ 298 .name = "mmpll9_early", 299 .parent_data = (const struct clk_parent_data[]){ 300 { .fw_name = "xo", .name = "xo_board" }, 301 }, 302 .num_parents = 1, 303 .ops = &clk_alpha_pll_ops, 304 }, 305 }; 306 307 static struct clk_alpha_pll_postdiv mmpll9 = { 308 .offset = 0x4200, 309 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], 310 .width = 2, 311 .clkr.hw.init = &(struct clk_init_data){ 312 .name = "mmpll9", 313 .parent_hws = (const struct clk_hw*[]){ 314 &mmpll9_early.clkr.hw 315 }, 316 .num_parents = 1, 317 .ops = &clk_alpha_pll_postdiv_ops, 318 .flags = CLK_SET_RATE_PARENT, 319 }, 320 }; 321 322 static const struct parent_map mmss_xo_hdmi_map[] = { 323 { P_XO, 0 }, 324 { P_HDMIPLL, 1 } 325 }; 326 327 static const struct clk_parent_data mmss_xo_hdmi[] = { 328 { .fw_name = "xo", .name = "xo_board" }, 329 { .fw_name = "hdmipll", .name = "hdmipll" } 330 }; 331 332 static const struct parent_map mmss_xo_dsi0pll_dsi1pll_map[] = { 333 { P_XO, 0 }, 334 { P_DSI0PLL, 1 }, 335 { P_DSI1PLL, 2 } 336 }; 337 338 static const struct clk_parent_data mmss_xo_dsi0pll_dsi1pll[] = { 339 { .fw_name = "xo", .name = "xo_board" }, 340 { .fw_name = "dsi0pll", .name = "dsi0pll" }, 341 { .fw_name = "dsi1pll", .name = "dsi1pll" } 342 }; 343 344 static const struct parent_map mmss_xo_gpll0_gpll0_div_map[] = { 345 { P_XO, 0 }, 346 { P_GPLL0, 5 }, 347 { P_GPLL0_DIV, 6 } 348 }; 349 350 static const struct clk_parent_data mmss_xo_gpll0_gpll0_div[] = { 351 { .fw_name = "xo", .name = "xo_board" }, 352 { .fw_name = "gpll0", .name = "gpll0" }, 353 { .hw = &gpll0_div.hw } 354 }; 355 356 static const struct parent_map mmss_xo_dsibyte_map[] = { 357 { P_XO, 0 }, 358 { P_DSI0PLL_BYTE, 1 }, 359 { P_DSI1PLL_BYTE, 2 } 360 }; 361 362 static const struct clk_parent_data mmss_xo_dsibyte[] = { 363 { .fw_name = "xo", .name = "xo_board" }, 364 { .fw_name = "dsi0pllbyte", .name = "dsi0pllbyte" }, 365 { .fw_name = "dsi1pllbyte", .name = "dsi1pllbyte" } 366 }; 367 368 static const struct parent_map mmss_xo_mmpll0_gpll0_gpll0_div_map[] = { 369 { P_XO, 0 }, 370 { P_MMPLL0, 1 }, 371 { P_GPLL0, 5 }, 372 { P_GPLL0_DIV, 6 } 373 }; 374 375 static const struct clk_parent_data mmss_xo_mmpll0_gpll0_gpll0_div[] = { 376 { .fw_name = "xo", .name = "xo_board" }, 377 { .hw = &mmpll0.clkr.hw }, 378 { .fw_name = "gpll0", .name = "gpll0" }, 379 { .hw = &gpll0_div.hw } 380 }; 381 382 static const struct parent_map mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div_map[] = { 383 { P_XO, 0 }, 384 { P_MMPLL0, 1 }, 385 { P_MMPLL1, 2 }, 386 { P_GPLL0, 5 }, 387 { P_GPLL0_DIV, 6 } 388 }; 389 390 static const struct clk_parent_data mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div[] = { 391 { .fw_name = "xo", .name = "xo_board" }, 392 { .hw = &mmpll0.clkr.hw }, 393 { .hw = &mmpll1.clkr.hw }, 394 { .fw_name = "gpll0", .name = "gpll0" }, 395 { .hw = &gpll0_div.hw } 396 }; 397 398 static const struct parent_map mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div_map[] = { 399 { P_XO, 0 }, 400 { P_MMPLL0, 1 }, 401 { P_MMPLL3, 3 }, 402 { P_GPLL0, 5 }, 403 { P_GPLL0_DIV, 6 } 404 }; 405 406 static const struct clk_parent_data mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div[] = { 407 { .fw_name = "xo", .name = "xo_board" }, 408 { .hw = &mmpll0.clkr.hw }, 409 { .hw = &mmpll3.clkr.hw }, 410 { .fw_name = "gpll0", .name = "gpll0" }, 411 { .hw = &gpll0_div.hw } 412 }; 413 414 static const struct parent_map mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div_map[] = { 415 { P_XO, 0 }, 416 { P_MMPLL0, 1 }, 417 { P_MMPLL5, 2 }, 418 { P_GPLL0, 5 }, 419 { P_GPLL0_DIV, 6 } 420 }; 421 422 static const struct clk_parent_data mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div[] = { 423 { .fw_name = "xo", .name = "xo_board" }, 424 { .hw = &mmpll0.clkr.hw }, 425 { .hw = &mmpll5.clkr.hw }, 426 { .fw_name = "gpll0", .name = "gpll0" }, 427 { .hw = &gpll0_div.hw } 428 }; 429 430 static const struct parent_map mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map[] = { 431 { P_XO, 0 }, 432 { P_MMPLL0, 1 }, 433 { P_MMPLL4, 3 }, 434 { P_GPLL0, 5 }, 435 { P_GPLL0_DIV, 6 } 436 }; 437 438 static const struct clk_parent_data mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div[] = { 439 { .fw_name = "xo", .name = "xo_board" }, 440 { .hw = &mmpll0.clkr.hw }, 441 { .hw = &mmpll4.clkr.hw }, 442 { .fw_name = "gpll0", .name = "gpll0" }, 443 { .hw = &gpll0_div.hw } 444 }; 445 446 static const struct parent_map mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_map[] = { 447 { P_XO, 0 }, 448 { P_MMPLL0, 1 }, 449 { P_MMPLL9, 2 }, 450 { P_MMPLL2, 3 }, 451 { P_MMPLL8, 4 }, 452 { P_GPLL0, 5 } 453 }; 454 455 static const struct clk_parent_data mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0[] = { 456 { .fw_name = "xo", .name = "xo_board" }, 457 { .hw = &mmpll0.clkr.hw }, 458 { .hw = &mmpll9.clkr.hw }, 459 { .hw = &mmpll2.clkr.hw }, 460 { .hw = &mmpll8.clkr.hw }, 461 { .fw_name = "gpll0", .name = "gpll0" }, 462 }; 463 464 static const struct parent_map mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_gpll0_div_map[] = { 465 { P_XO, 0 }, 466 { P_MMPLL0, 1 }, 467 { P_MMPLL9, 2 }, 468 { P_MMPLL2, 3 }, 469 { P_MMPLL8, 4 }, 470 { P_GPLL0, 5 }, 471 { P_GPLL0_DIV, 6 } 472 }; 473 474 static const struct clk_parent_data mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_gpll0_div[] = { 475 { .fw_name = "xo", .name = "xo_board" }, 476 { .hw = &mmpll0.clkr.hw }, 477 { .hw = &mmpll9.clkr.hw }, 478 { .hw = &mmpll2.clkr.hw }, 479 { .hw = &mmpll8.clkr.hw }, 480 { .fw_name = "gpll0", .name = "gpll0" }, 481 { .hw = &gpll0_div.hw } 482 }; 483 484 static const struct parent_map mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map[] = { 485 { P_XO, 0 }, 486 { P_MMPLL0, 1 }, 487 { P_MMPLL1, 2 }, 488 { P_MMPLL4, 3 }, 489 { P_MMPLL3, 4 }, 490 { P_GPLL0, 5 }, 491 { P_GPLL0_DIV, 6 } 492 }; 493 494 static const struct clk_parent_data mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div[] = { 495 { .fw_name = "xo", .name = "xo_board" }, 496 { .hw = &mmpll0.clkr.hw }, 497 { .hw = &mmpll1.clkr.hw }, 498 { .hw = &mmpll4.clkr.hw }, 499 { .hw = &mmpll3.clkr.hw }, 500 { .fw_name = "gpll0", .name = "gpll0" }, 501 { .hw = &gpll0_div.hw } 502 }; 503 504 static const struct freq_tbl ftbl_ahb_clk_src[] = { 505 F(19200000, P_XO, 1, 0, 0), 506 F(40000000, P_GPLL0_DIV, 7.5, 0, 0), 507 F(80000000, P_MMPLL0, 10, 0, 0), 508 { } 509 }; 510 511 static struct clk_rcg2 ahb_clk_src = { 512 .cmd_rcgr = 0x5000, 513 .hid_width = 5, 514 .parent_map = mmss_xo_mmpll0_gpll0_gpll0_div_map, 515 .freq_tbl = ftbl_ahb_clk_src, 516 .clkr.hw.init = &(struct clk_init_data){ 517 .name = "ahb_clk_src", 518 .parent_data = mmss_xo_mmpll0_gpll0_gpll0_div, 519 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_gpll0_gpll0_div), 520 .ops = &clk_rcg2_ops, 521 }, 522 }; 523 524 static const struct freq_tbl ftbl_axi_clk_src[] = { 525 F(19200000, P_XO, 1, 0, 0), 526 F(75000000, P_GPLL0_DIV, 4, 0, 0), 527 F(100000000, P_GPLL0, 6, 0, 0), 528 F(171430000, P_GPLL0, 3.5, 0, 0), 529 F(200000000, P_GPLL0, 3, 0, 0), 530 F(320000000, P_MMPLL0, 2.5, 0, 0), 531 F(400000000, P_MMPLL0, 2, 0, 0), 532 { } 533 }; 534 535 static struct clk_rcg2 axi_clk_src = { 536 .cmd_rcgr = 0x5040, 537 .hid_width = 5, 538 .parent_map = mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div_map, 539 .freq_tbl = ftbl_axi_clk_src, 540 .clkr.hw.init = &(struct clk_init_data){ 541 .name = "axi_clk_src", 542 .parent_data = mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div, 543 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div), 544 .ops = &clk_rcg2_ops, 545 }, 546 }; 547 548 static struct clk_rcg2 maxi_clk_src = { 549 .cmd_rcgr = 0x5090, 550 .hid_width = 5, 551 .parent_map = mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div_map, 552 .freq_tbl = ftbl_axi_clk_src, 553 .clkr.hw.init = &(struct clk_init_data){ 554 .name = "maxi_clk_src", 555 .parent_data = mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div, 556 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div), 557 .ops = &clk_rcg2_ops, 558 }, 559 }; 560 561 static struct clk_rcg2_gfx3d gfx3d_clk_src = { 562 .rcg = { 563 .cmd_rcgr = 0x4000, 564 .hid_width = 5, 565 .parent_map = mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_map, 566 .clkr.hw.init = &(struct clk_init_data){ 567 .name = "gfx3d_clk_src", 568 .parent_data = mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0, 569 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0), 570 .ops = &clk_gfx3d_ops, 571 .flags = CLK_SET_RATE_PARENT, 572 }, 573 }, 574 .hws = (struct clk_hw*[]) { 575 &mmpll9.clkr.hw, 576 &mmpll2.clkr.hw, 577 &mmpll8.clkr.hw 578 }, 579 }; 580 581 static const struct freq_tbl ftbl_rbbmtimer_clk_src[] = { 582 F(19200000, P_XO, 1, 0, 0), 583 { } 584 }; 585 586 static struct clk_rcg2 rbbmtimer_clk_src = { 587 .cmd_rcgr = 0x4090, 588 .hid_width = 5, 589 .parent_map = mmss_xo_mmpll0_gpll0_gpll0_div_map, 590 .freq_tbl = ftbl_rbbmtimer_clk_src, 591 .clkr.hw.init = &(struct clk_init_data){ 592 .name = "rbbmtimer_clk_src", 593 .parent_data = mmss_xo_mmpll0_gpll0_gpll0_div, 594 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_gpll0_gpll0_div), 595 .ops = &clk_rcg2_ops, 596 }, 597 }; 598 599 static struct clk_rcg2 isense_clk_src = { 600 .cmd_rcgr = 0x4010, 601 .hid_width = 5, 602 .parent_map = mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_gpll0_div_map, 603 .clkr.hw.init = &(struct clk_init_data){ 604 .name = "isense_clk_src", 605 .parent_data = mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_gpll0_div, 606 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_gpll0_div), 607 .ops = &clk_rcg2_ops, 608 }, 609 }; 610 611 static const struct freq_tbl ftbl_rbcpr_clk_src[] = { 612 F(19200000, P_XO, 1, 0, 0), 613 F(50000000, P_GPLL0, 12, 0, 0), 614 { } 615 }; 616 617 static struct clk_rcg2 rbcpr_clk_src = { 618 .cmd_rcgr = 0x4060, 619 .hid_width = 5, 620 .parent_map = mmss_xo_mmpll0_gpll0_gpll0_div_map, 621 .freq_tbl = ftbl_rbcpr_clk_src, 622 .clkr.hw.init = &(struct clk_init_data){ 623 .name = "rbcpr_clk_src", 624 .parent_data = mmss_xo_mmpll0_gpll0_gpll0_div, 625 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_gpll0_gpll0_div), 626 .ops = &clk_rcg2_ops, 627 }, 628 }; 629 630 static const struct freq_tbl ftbl_video_core_clk_src[] = { 631 F(75000000, P_GPLL0_DIV, 4, 0, 0), 632 F(150000000, P_GPLL0, 4, 0, 0), 633 F(346666667, P_MMPLL3, 3, 0, 0), 634 F(520000000, P_MMPLL3, 2, 0, 0), 635 { } 636 }; 637 638 static struct clk_rcg2 video_core_clk_src = { 639 .cmd_rcgr = 0x1000, 640 .mnd_width = 8, 641 .hid_width = 5, 642 .parent_map = mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div_map, 643 .freq_tbl = ftbl_video_core_clk_src, 644 .clkr.hw.init = &(struct clk_init_data){ 645 .name = "video_core_clk_src", 646 .parent_data = mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div, 647 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div), 648 .ops = &clk_rcg2_ops, 649 }, 650 }; 651 652 static struct clk_rcg2 video_subcore0_clk_src = { 653 .cmd_rcgr = 0x1060, 654 .mnd_width = 8, 655 .hid_width = 5, 656 .parent_map = mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div_map, 657 .freq_tbl = ftbl_video_core_clk_src, 658 .clkr.hw.init = &(struct clk_init_data){ 659 .name = "video_subcore0_clk_src", 660 .parent_data = mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div, 661 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div), 662 .ops = &clk_rcg2_ops, 663 }, 664 }; 665 666 static struct clk_rcg2 video_subcore1_clk_src = { 667 .cmd_rcgr = 0x1080, 668 .mnd_width = 8, 669 .hid_width = 5, 670 .parent_map = mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div_map, 671 .freq_tbl = ftbl_video_core_clk_src, 672 .clkr.hw.init = &(struct clk_init_data){ 673 .name = "video_subcore1_clk_src", 674 .parent_data = mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div, 675 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div), 676 .ops = &clk_rcg2_ops, 677 }, 678 }; 679 680 static struct clk_rcg2 pclk0_clk_src = { 681 .cmd_rcgr = 0x2000, 682 .mnd_width = 8, 683 .hid_width = 5, 684 .parent_map = mmss_xo_dsi0pll_dsi1pll_map, 685 .clkr.hw.init = &(struct clk_init_data){ 686 .name = "pclk0_clk_src", 687 .parent_data = mmss_xo_dsi0pll_dsi1pll, 688 .num_parents = ARRAY_SIZE(mmss_xo_dsi0pll_dsi1pll), 689 .ops = &clk_pixel_ops, 690 .flags = CLK_SET_RATE_PARENT, 691 }, 692 }; 693 694 static struct clk_rcg2 pclk1_clk_src = { 695 .cmd_rcgr = 0x2020, 696 .mnd_width = 8, 697 .hid_width = 5, 698 .parent_map = mmss_xo_dsi0pll_dsi1pll_map, 699 .clkr.hw.init = &(struct clk_init_data){ 700 .name = "pclk1_clk_src", 701 .parent_data = mmss_xo_dsi0pll_dsi1pll, 702 .num_parents = ARRAY_SIZE(mmss_xo_dsi0pll_dsi1pll), 703 .ops = &clk_pixel_ops, 704 .flags = CLK_SET_RATE_PARENT, 705 }, 706 }; 707 708 static const struct freq_tbl ftbl_mdp_clk_src[] = { 709 F(85714286, P_GPLL0, 7, 0, 0), 710 F(100000000, P_GPLL0, 6, 0, 0), 711 F(150000000, P_GPLL0, 4, 0, 0), 712 F(171428571, P_GPLL0, 3.5, 0, 0), 713 F(200000000, P_GPLL0, 3, 0, 0), 714 F(275000000, P_MMPLL5, 3, 0, 0), 715 F(300000000, P_GPLL0, 2, 0, 0), 716 F(330000000, P_MMPLL5, 2.5, 0, 0), 717 F(412500000, P_MMPLL5, 2, 0, 0), 718 { } 719 }; 720 721 static struct clk_rcg2 mdp_clk_src = { 722 .cmd_rcgr = 0x2040, 723 .hid_width = 5, 724 .parent_map = mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div_map, 725 .freq_tbl = ftbl_mdp_clk_src, 726 .clkr.hw.init = &(struct clk_init_data){ 727 .name = "mdp_clk_src", 728 .parent_data = mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div, 729 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div), 730 .ops = &clk_rcg2_ops, 731 }, 732 }; 733 734 static const struct freq_tbl extpclk_freq_tbl[] = { 735 { .src = P_HDMIPLL }, 736 { } 737 }; 738 739 static struct clk_rcg2 extpclk_clk_src = { 740 .cmd_rcgr = 0x2060, 741 .hid_width = 5, 742 .parent_map = mmss_xo_hdmi_map, 743 .freq_tbl = extpclk_freq_tbl, 744 .clkr.hw.init = &(struct clk_init_data){ 745 .name = "extpclk_clk_src", 746 .parent_data = mmss_xo_hdmi, 747 .num_parents = ARRAY_SIZE(mmss_xo_hdmi), 748 .ops = &clk_byte_ops, 749 .flags = CLK_SET_RATE_PARENT, 750 }, 751 }; 752 753 static const struct freq_tbl ftbl_mdss_vsync_clk[] = { 754 F(19200000, P_XO, 1, 0, 0), 755 { } 756 }; 757 758 static struct clk_rcg2 vsync_clk_src = { 759 .cmd_rcgr = 0x2080, 760 .hid_width = 5, 761 .parent_map = mmss_xo_gpll0_gpll0_div_map, 762 .freq_tbl = ftbl_mdss_vsync_clk, 763 .clkr.hw.init = &(struct clk_init_data){ 764 .name = "vsync_clk_src", 765 .parent_data = mmss_xo_gpll0_gpll0_div, 766 .num_parents = ARRAY_SIZE(mmss_xo_gpll0_gpll0_div), 767 .ops = &clk_rcg2_ops, 768 }, 769 }; 770 771 static const struct freq_tbl ftbl_mdss_hdmi_clk[] = { 772 F(19200000, P_XO, 1, 0, 0), 773 { } 774 }; 775 776 static struct clk_rcg2 hdmi_clk_src = { 777 .cmd_rcgr = 0x2100, 778 .hid_width = 5, 779 .parent_map = mmss_xo_gpll0_gpll0_div_map, 780 .freq_tbl = ftbl_mdss_hdmi_clk, 781 .clkr.hw.init = &(struct clk_init_data){ 782 .name = "hdmi_clk_src", 783 .parent_data = mmss_xo_gpll0_gpll0_div, 784 .num_parents = ARRAY_SIZE(mmss_xo_gpll0_gpll0_div), 785 .ops = &clk_rcg2_ops, 786 }, 787 }; 788 789 static struct clk_rcg2 byte0_clk_src = { 790 .cmd_rcgr = 0x2120, 791 .hid_width = 5, 792 .parent_map = mmss_xo_dsibyte_map, 793 .clkr.hw.init = &(struct clk_init_data){ 794 .name = "byte0_clk_src", 795 .parent_data = mmss_xo_dsibyte, 796 .num_parents = ARRAY_SIZE(mmss_xo_dsibyte), 797 .ops = &clk_byte2_ops, 798 .flags = CLK_SET_RATE_PARENT, 799 }, 800 }; 801 802 static struct clk_rcg2 byte1_clk_src = { 803 .cmd_rcgr = 0x2140, 804 .hid_width = 5, 805 .parent_map = mmss_xo_dsibyte_map, 806 .clkr.hw.init = &(struct clk_init_data){ 807 .name = "byte1_clk_src", 808 .parent_data = mmss_xo_dsibyte, 809 .num_parents = ARRAY_SIZE(mmss_xo_dsibyte), 810 .ops = &clk_byte2_ops, 811 .flags = CLK_SET_RATE_PARENT, 812 }, 813 }; 814 815 static const struct freq_tbl ftbl_mdss_esc0_1_clk[] = { 816 F(19200000, P_XO, 1, 0, 0), 817 { } 818 }; 819 820 static struct clk_rcg2 esc0_clk_src = { 821 .cmd_rcgr = 0x2160, 822 .hid_width = 5, 823 .parent_map = mmss_xo_dsibyte_map, 824 .freq_tbl = ftbl_mdss_esc0_1_clk, 825 .clkr.hw.init = &(struct clk_init_data){ 826 .name = "esc0_clk_src", 827 .parent_data = mmss_xo_dsibyte, 828 .num_parents = ARRAY_SIZE(mmss_xo_dsibyte), 829 .ops = &clk_rcg2_ops, 830 }, 831 }; 832 833 static struct clk_rcg2 esc1_clk_src = { 834 .cmd_rcgr = 0x2180, 835 .hid_width = 5, 836 .parent_map = mmss_xo_dsibyte_map, 837 .freq_tbl = ftbl_mdss_esc0_1_clk, 838 .clkr.hw.init = &(struct clk_init_data){ 839 .name = "esc1_clk_src", 840 .parent_data = mmss_xo_dsibyte, 841 .num_parents = ARRAY_SIZE(mmss_xo_dsibyte), 842 .ops = &clk_rcg2_ops, 843 }, 844 }; 845 846 static const struct freq_tbl ftbl_camss_gp0_clk_src[] = { 847 F(10000, P_XO, 16, 1, 120), 848 F(24000, P_XO, 16, 1, 50), 849 F(6000000, P_GPLL0_DIV, 10, 1, 5), 850 F(12000000, P_GPLL0_DIV, 1, 1, 25), 851 F(13000000, P_GPLL0_DIV, 2, 13, 150), 852 F(24000000, P_GPLL0_DIV, 1, 2, 25), 853 { } 854 }; 855 856 static struct clk_rcg2 camss_gp0_clk_src = { 857 .cmd_rcgr = 0x3420, 858 .mnd_width = 8, 859 .hid_width = 5, 860 .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map, 861 .freq_tbl = ftbl_camss_gp0_clk_src, 862 .clkr.hw.init = &(struct clk_init_data){ 863 .name = "camss_gp0_clk_src", 864 .parent_data = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div, 865 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div), 866 .ops = &clk_rcg2_ops, 867 }, 868 }; 869 870 static struct clk_rcg2 camss_gp1_clk_src = { 871 .cmd_rcgr = 0x3450, 872 .mnd_width = 8, 873 .hid_width = 5, 874 .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map, 875 .freq_tbl = ftbl_camss_gp0_clk_src, 876 .clkr.hw.init = &(struct clk_init_data){ 877 .name = "camss_gp1_clk_src", 878 .parent_data = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div, 879 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div), 880 .ops = &clk_rcg2_ops, 881 }, 882 }; 883 884 static const struct freq_tbl ftbl_mclk0_clk_src[] = { 885 F(4800000, P_XO, 4, 0, 0), 886 F(6000000, P_GPLL0_DIV, 10, 1, 5), 887 F(8000000, P_GPLL0_DIV, 1, 2, 75), 888 F(9600000, P_XO, 2, 0, 0), 889 F(16666667, P_GPLL0_DIV, 2, 1, 9), 890 F(19200000, P_XO, 1, 0, 0), 891 F(24000000, P_GPLL0_DIV, 1, 2, 25), 892 F(33333333, P_GPLL0_DIV, 1, 1, 9), 893 F(48000000, P_GPLL0, 1, 2, 25), 894 F(66666667, P_GPLL0, 1, 1, 9), 895 { } 896 }; 897 898 static struct clk_rcg2 mclk0_clk_src = { 899 .cmd_rcgr = 0x3360, 900 .mnd_width = 8, 901 .hid_width = 5, 902 .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map, 903 .freq_tbl = ftbl_mclk0_clk_src, 904 .clkr.hw.init = &(struct clk_init_data){ 905 .name = "mclk0_clk_src", 906 .parent_data = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div, 907 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div), 908 .ops = &clk_rcg2_ops, 909 }, 910 }; 911 912 static struct clk_rcg2 mclk1_clk_src = { 913 .cmd_rcgr = 0x3390, 914 .mnd_width = 8, 915 .hid_width = 5, 916 .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map, 917 .freq_tbl = ftbl_mclk0_clk_src, 918 .clkr.hw.init = &(struct clk_init_data){ 919 .name = "mclk1_clk_src", 920 .parent_data = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div, 921 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div), 922 .ops = &clk_rcg2_ops, 923 }, 924 }; 925 926 static struct clk_rcg2 mclk2_clk_src = { 927 .cmd_rcgr = 0x33c0, 928 .mnd_width = 8, 929 .hid_width = 5, 930 .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map, 931 .freq_tbl = ftbl_mclk0_clk_src, 932 .clkr.hw.init = &(struct clk_init_data){ 933 .name = "mclk2_clk_src", 934 .parent_data = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div, 935 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div), 936 .ops = &clk_rcg2_ops, 937 }, 938 }; 939 940 static struct clk_rcg2 mclk3_clk_src = { 941 .cmd_rcgr = 0x33f0, 942 .mnd_width = 8, 943 .hid_width = 5, 944 .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map, 945 .freq_tbl = ftbl_mclk0_clk_src, 946 .clkr.hw.init = &(struct clk_init_data){ 947 .name = "mclk3_clk_src", 948 .parent_data = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div, 949 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div), 950 .ops = &clk_rcg2_ops, 951 }, 952 }; 953 954 static const struct freq_tbl ftbl_cci_clk_src[] = { 955 F(19200000, P_XO, 1, 0, 0), 956 F(37500000, P_GPLL0, 16, 0, 0), 957 F(50000000, P_GPLL0, 12, 0, 0), 958 F(100000000, P_GPLL0, 6, 0, 0), 959 { } 960 }; 961 962 static struct clk_rcg2 cci_clk_src = { 963 .cmd_rcgr = 0x3300, 964 .mnd_width = 8, 965 .hid_width = 5, 966 .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map, 967 .freq_tbl = ftbl_cci_clk_src, 968 .clkr.hw.init = &(struct clk_init_data){ 969 .name = "cci_clk_src", 970 .parent_data = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div, 971 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div), 972 .ops = &clk_rcg2_ops, 973 }, 974 }; 975 976 static const struct freq_tbl ftbl_csi0phytimer_clk_src[] = { 977 F(100000000, P_GPLL0_DIV, 3, 0, 0), 978 F(200000000, P_GPLL0, 3, 0, 0), 979 F(266666667, P_MMPLL0, 3, 0, 0), 980 { } 981 }; 982 983 static struct clk_rcg2 csi0phytimer_clk_src = { 984 .cmd_rcgr = 0x3000, 985 .hid_width = 5, 986 .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map, 987 .freq_tbl = ftbl_csi0phytimer_clk_src, 988 .clkr.hw.init = &(struct clk_init_data){ 989 .name = "csi0phytimer_clk_src", 990 .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div, 991 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div), 992 .ops = &clk_rcg2_ops, 993 }, 994 }; 995 996 static struct clk_rcg2 csi1phytimer_clk_src = { 997 .cmd_rcgr = 0x3030, 998 .hid_width = 5, 999 .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map, 1000 .freq_tbl = ftbl_csi0phytimer_clk_src, 1001 .clkr.hw.init = &(struct clk_init_data){ 1002 .name = "csi1phytimer_clk_src", 1003 .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div, 1004 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div), 1005 .ops = &clk_rcg2_ops, 1006 }, 1007 }; 1008 1009 static struct clk_rcg2 csi2phytimer_clk_src = { 1010 .cmd_rcgr = 0x3060, 1011 .hid_width = 5, 1012 .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map, 1013 .freq_tbl = ftbl_csi0phytimer_clk_src, 1014 .clkr.hw.init = &(struct clk_init_data){ 1015 .name = "csi2phytimer_clk_src", 1016 .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div, 1017 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div), 1018 .ops = &clk_rcg2_ops, 1019 }, 1020 }; 1021 1022 static const struct freq_tbl ftbl_csiphy0_3p_clk_src[] = { 1023 F(100000000, P_GPLL0_DIV, 3, 0, 0), 1024 F(200000000, P_GPLL0, 3, 0, 0), 1025 F(320000000, P_MMPLL4, 3, 0, 0), 1026 F(384000000, P_MMPLL4, 2.5, 0, 0), 1027 { } 1028 }; 1029 1030 static struct clk_rcg2 csiphy0_3p_clk_src = { 1031 .cmd_rcgr = 0x3240, 1032 .hid_width = 5, 1033 .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map, 1034 .freq_tbl = ftbl_csiphy0_3p_clk_src, 1035 .clkr.hw.init = &(struct clk_init_data){ 1036 .name = "csiphy0_3p_clk_src", 1037 .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div, 1038 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div), 1039 .ops = &clk_rcg2_ops, 1040 }, 1041 }; 1042 1043 static struct clk_rcg2 csiphy1_3p_clk_src = { 1044 .cmd_rcgr = 0x3260, 1045 .hid_width = 5, 1046 .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map, 1047 .freq_tbl = ftbl_csiphy0_3p_clk_src, 1048 .clkr.hw.init = &(struct clk_init_data){ 1049 .name = "csiphy1_3p_clk_src", 1050 .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div, 1051 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div), 1052 .ops = &clk_rcg2_ops, 1053 }, 1054 }; 1055 1056 static struct clk_rcg2 csiphy2_3p_clk_src = { 1057 .cmd_rcgr = 0x3280, 1058 .hid_width = 5, 1059 .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map, 1060 .freq_tbl = ftbl_csiphy0_3p_clk_src, 1061 .clkr.hw.init = &(struct clk_init_data){ 1062 .name = "csiphy2_3p_clk_src", 1063 .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div, 1064 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div), 1065 .ops = &clk_rcg2_ops, 1066 }, 1067 }; 1068 1069 static const struct freq_tbl ftbl_jpeg0_clk_src[] = { 1070 F(75000000, P_GPLL0_DIV, 4, 0, 0), 1071 F(150000000, P_GPLL0, 4, 0, 0), 1072 F(228571429, P_MMPLL0, 3.5, 0, 0), 1073 F(266666667, P_MMPLL0, 3, 0, 0), 1074 F(320000000, P_MMPLL0, 2.5, 0, 0), 1075 F(480000000, P_MMPLL4, 2, 0, 0), 1076 { } 1077 }; 1078 1079 static struct clk_rcg2 jpeg0_clk_src = { 1080 .cmd_rcgr = 0x3500, 1081 .hid_width = 5, 1082 .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map, 1083 .freq_tbl = ftbl_jpeg0_clk_src, 1084 .clkr.hw.init = &(struct clk_init_data){ 1085 .name = "jpeg0_clk_src", 1086 .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div, 1087 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div), 1088 .ops = &clk_rcg2_ops, 1089 }, 1090 }; 1091 1092 static const struct freq_tbl ftbl_jpeg2_clk_src[] = { 1093 F(75000000, P_GPLL0_DIV, 4, 0, 0), 1094 F(150000000, P_GPLL0, 4, 0, 0), 1095 F(228571429, P_MMPLL0, 3.5, 0, 0), 1096 F(266666667, P_MMPLL0, 3, 0, 0), 1097 F(320000000, P_MMPLL0, 2.5, 0, 0), 1098 { } 1099 }; 1100 1101 static struct clk_rcg2 jpeg2_clk_src = { 1102 .cmd_rcgr = 0x3540, 1103 .hid_width = 5, 1104 .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map, 1105 .freq_tbl = ftbl_jpeg2_clk_src, 1106 .clkr.hw.init = &(struct clk_init_data){ 1107 .name = "jpeg2_clk_src", 1108 .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div, 1109 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div), 1110 .ops = &clk_rcg2_ops, 1111 }, 1112 }; 1113 1114 static struct clk_rcg2 jpeg_dma_clk_src = { 1115 .cmd_rcgr = 0x3560, 1116 .hid_width = 5, 1117 .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map, 1118 .freq_tbl = ftbl_jpeg0_clk_src, 1119 .clkr.hw.init = &(struct clk_init_data){ 1120 .name = "jpeg_dma_clk_src", 1121 .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div, 1122 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div), 1123 .ops = &clk_rcg2_ops, 1124 }, 1125 }; 1126 1127 static const struct freq_tbl ftbl_vfe0_clk_src[] = { 1128 F(75000000, P_GPLL0_DIV, 4, 0, 0), 1129 F(100000000, P_GPLL0_DIV, 3, 0, 0), 1130 F(300000000, P_GPLL0, 2, 0, 0), 1131 F(320000000, P_MMPLL0, 2.5, 0, 0), 1132 F(480000000, P_MMPLL4, 2, 0, 0), 1133 F(600000000, P_GPLL0, 1, 0, 0), 1134 { } 1135 }; 1136 1137 static struct clk_rcg2 vfe0_clk_src = { 1138 .cmd_rcgr = 0x3600, 1139 .hid_width = 5, 1140 .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map, 1141 .freq_tbl = ftbl_vfe0_clk_src, 1142 .clkr.hw.init = &(struct clk_init_data){ 1143 .name = "vfe0_clk_src", 1144 .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div, 1145 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div), 1146 .ops = &clk_rcg2_ops, 1147 }, 1148 }; 1149 1150 static struct clk_rcg2 vfe1_clk_src = { 1151 .cmd_rcgr = 0x3620, 1152 .hid_width = 5, 1153 .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map, 1154 .freq_tbl = ftbl_vfe0_clk_src, 1155 .clkr.hw.init = &(struct clk_init_data){ 1156 .name = "vfe1_clk_src", 1157 .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div, 1158 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div), 1159 .ops = &clk_rcg2_ops, 1160 }, 1161 }; 1162 1163 static const struct freq_tbl ftbl_cpp_clk_src[] = { 1164 F(100000000, P_GPLL0_DIV, 3, 0, 0), 1165 F(200000000, P_GPLL0, 3, 0, 0), 1166 F(320000000, P_MMPLL0, 2.5, 0, 0), 1167 F(480000000, P_MMPLL4, 2, 0, 0), 1168 F(640000000, P_MMPLL4, 1.5, 0, 0), 1169 { } 1170 }; 1171 1172 static struct clk_rcg2 cpp_clk_src = { 1173 .cmd_rcgr = 0x3640, 1174 .hid_width = 5, 1175 .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map, 1176 .freq_tbl = ftbl_cpp_clk_src, 1177 .clkr.hw.init = &(struct clk_init_data){ 1178 .name = "cpp_clk_src", 1179 .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div, 1180 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div), 1181 .ops = &clk_rcg2_ops, 1182 }, 1183 }; 1184 1185 static const struct freq_tbl ftbl_csi0_clk_src[] = { 1186 F(100000000, P_GPLL0_DIV, 3, 0, 0), 1187 F(200000000, P_GPLL0, 3, 0, 0), 1188 F(266666667, P_MMPLL0, 3, 0, 0), 1189 F(480000000, P_MMPLL4, 2, 0, 0), 1190 F(600000000, P_GPLL0, 1, 0, 0), 1191 { } 1192 }; 1193 1194 static struct clk_rcg2 csi0_clk_src = { 1195 .cmd_rcgr = 0x3090, 1196 .hid_width = 5, 1197 .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map, 1198 .freq_tbl = ftbl_csi0_clk_src, 1199 .clkr.hw.init = &(struct clk_init_data){ 1200 .name = "csi0_clk_src", 1201 .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div, 1202 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div), 1203 .ops = &clk_rcg2_ops, 1204 }, 1205 }; 1206 1207 static struct clk_rcg2 csi1_clk_src = { 1208 .cmd_rcgr = 0x3100, 1209 .hid_width = 5, 1210 .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map, 1211 .freq_tbl = ftbl_csi0_clk_src, 1212 .clkr.hw.init = &(struct clk_init_data){ 1213 .name = "csi1_clk_src", 1214 .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div, 1215 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div), 1216 .ops = &clk_rcg2_ops, 1217 }, 1218 }; 1219 1220 static struct clk_rcg2 csi2_clk_src = { 1221 .cmd_rcgr = 0x3160, 1222 .hid_width = 5, 1223 .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map, 1224 .freq_tbl = ftbl_csi0_clk_src, 1225 .clkr.hw.init = &(struct clk_init_data){ 1226 .name = "csi2_clk_src", 1227 .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div, 1228 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div), 1229 .ops = &clk_rcg2_ops, 1230 }, 1231 }; 1232 1233 static struct clk_rcg2 csi3_clk_src = { 1234 .cmd_rcgr = 0x31c0, 1235 .hid_width = 5, 1236 .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map, 1237 .freq_tbl = ftbl_csi0_clk_src, 1238 .clkr.hw.init = &(struct clk_init_data){ 1239 .name = "csi3_clk_src", 1240 .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div, 1241 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div), 1242 .ops = &clk_rcg2_ops, 1243 }, 1244 }; 1245 1246 static const struct freq_tbl ftbl_fd_core_clk_src[] = { 1247 F(100000000, P_GPLL0_DIV, 3, 0, 0), 1248 F(200000000, P_GPLL0, 3, 0, 0), 1249 F(400000000, P_MMPLL0, 2, 0, 0), 1250 { } 1251 }; 1252 1253 static struct clk_rcg2 fd_core_clk_src = { 1254 .cmd_rcgr = 0x3b00, 1255 .hid_width = 5, 1256 .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map, 1257 .freq_tbl = ftbl_fd_core_clk_src, 1258 .clkr.hw.init = &(struct clk_init_data){ 1259 .name = "fd_core_clk_src", 1260 .parent_data = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div, 1261 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div), 1262 .ops = &clk_rcg2_ops, 1263 }, 1264 }; 1265 1266 static struct clk_branch mmss_mmagic_ahb_clk = { 1267 .halt_reg = 0x5024, 1268 .clkr = { 1269 .enable_reg = 0x5024, 1270 .enable_mask = BIT(0), 1271 .hw.init = &(struct clk_init_data){ 1272 .name = "mmss_mmagic_ahb_clk", 1273 .parent_hws = (const struct clk_hw*[]){ 1274 &ahb_clk_src.clkr.hw 1275 }, 1276 .num_parents = 1, 1277 .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 1278 .ops = &clk_branch2_ops, 1279 }, 1280 }, 1281 }; 1282 1283 static struct clk_branch mmss_mmagic_cfg_ahb_clk = { 1284 .halt_reg = 0x5054, 1285 .clkr = { 1286 .enable_reg = 0x5054, 1287 .enable_mask = BIT(0), 1288 .hw.init = &(struct clk_init_data){ 1289 .name = "mmss_mmagic_cfg_ahb_clk", 1290 .parent_hws = (const struct clk_hw*[]){ 1291 &ahb_clk_src.clkr.hw 1292 }, 1293 .num_parents = 1, 1294 .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 1295 .ops = &clk_branch2_ops, 1296 }, 1297 }, 1298 }; 1299 1300 static struct clk_branch mmss_misc_ahb_clk = { 1301 .halt_reg = 0x5018, 1302 .clkr = { 1303 .enable_reg = 0x5018, 1304 .enable_mask = BIT(0), 1305 .hw.init = &(struct clk_init_data){ 1306 .name = "mmss_misc_ahb_clk", 1307 .parent_hws = (const struct clk_hw*[]){ 1308 &ahb_clk_src.clkr.hw 1309 }, 1310 .num_parents = 1, 1311 .flags = CLK_SET_RATE_PARENT, 1312 .ops = &clk_branch2_ops, 1313 }, 1314 }, 1315 }; 1316 1317 static struct clk_branch mmss_misc_cxo_clk = { 1318 .halt_reg = 0x5014, 1319 .clkr = { 1320 .enable_reg = 0x5014, 1321 .enable_mask = BIT(0), 1322 .hw.init = &(struct clk_init_data){ 1323 .name = "mmss_misc_cxo_clk", 1324 .parent_data = (const struct clk_parent_data[]){ 1325 { .fw_name = "xo", .name = "xo_board" }, 1326 }, 1327 .num_parents = 1, 1328 .ops = &clk_branch2_ops, 1329 }, 1330 }, 1331 }; 1332 1333 static struct clk_branch mmss_mmagic_maxi_clk = { 1334 .halt_reg = 0x5074, 1335 .clkr = { 1336 .enable_reg = 0x5074, 1337 .enable_mask = BIT(0), 1338 .hw.init = &(struct clk_init_data){ 1339 .name = "mmss_mmagic_maxi_clk", 1340 .parent_hws = (const struct clk_hw*[]){ 1341 &maxi_clk_src.clkr.hw 1342 }, 1343 .num_parents = 1, 1344 .flags = CLK_SET_RATE_PARENT, 1345 .ops = &clk_branch2_ops, 1346 }, 1347 }, 1348 }; 1349 1350 static struct clk_branch mmagic_camss_axi_clk = { 1351 .halt_reg = 0x3c44, 1352 .clkr = { 1353 .enable_reg = 0x3c44, 1354 .enable_mask = BIT(0), 1355 .hw.init = &(struct clk_init_data){ 1356 .name = "mmagic_camss_axi_clk", 1357 .parent_hws = (const struct clk_hw*[]){ 1358 &axi_clk_src.clkr.hw 1359 }, 1360 .num_parents = 1, 1361 .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 1362 .ops = &clk_branch2_ops, 1363 }, 1364 }, 1365 }; 1366 1367 static struct clk_branch mmagic_camss_noc_cfg_ahb_clk = { 1368 .halt_reg = 0x3c48, 1369 .clkr = { 1370 .enable_reg = 0x3c48, 1371 .enable_mask = BIT(0), 1372 .hw.init = &(struct clk_init_data){ 1373 .name = "mmagic_camss_noc_cfg_ahb_clk", 1374 .parent_data = (const struct clk_parent_data[]){ 1375 { .fw_name = "gcc_mmss_noc_cfg_ahb_clk", .name = "gcc_mmss_noc_cfg_ahb_clk" }, 1376 }, 1377 .num_parents = 1, 1378 .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 1379 .ops = &clk_branch2_ops, 1380 }, 1381 }, 1382 }; 1383 1384 static struct clk_branch smmu_vfe_ahb_clk = { 1385 .halt_reg = 0x3c04, 1386 .clkr = { 1387 .enable_reg = 0x3c04, 1388 .enable_mask = BIT(0), 1389 .hw.init = &(struct clk_init_data){ 1390 .name = "smmu_vfe_ahb_clk", 1391 .parent_hws = (const struct clk_hw*[]){ 1392 &ahb_clk_src.clkr.hw 1393 }, 1394 .num_parents = 1, 1395 .flags = CLK_SET_RATE_PARENT, 1396 .ops = &clk_branch2_ops, 1397 }, 1398 }, 1399 }; 1400 1401 static struct clk_branch smmu_vfe_axi_clk = { 1402 .halt_reg = 0x3c08, 1403 .clkr = { 1404 .enable_reg = 0x3c08, 1405 .enable_mask = BIT(0), 1406 .hw.init = &(struct clk_init_data){ 1407 .name = "smmu_vfe_axi_clk", 1408 .parent_hws = (const struct clk_hw*[]){ 1409 &axi_clk_src.clkr.hw 1410 }, 1411 .num_parents = 1, 1412 .flags = CLK_SET_RATE_PARENT, 1413 .ops = &clk_branch2_ops, 1414 }, 1415 }, 1416 }; 1417 1418 static struct clk_branch smmu_cpp_ahb_clk = { 1419 .halt_reg = 0x3c14, 1420 .clkr = { 1421 .enable_reg = 0x3c14, 1422 .enable_mask = BIT(0), 1423 .hw.init = &(struct clk_init_data){ 1424 .name = "smmu_cpp_ahb_clk", 1425 .parent_hws = (const struct clk_hw*[]){ 1426 &ahb_clk_src.clkr.hw 1427 }, 1428 .num_parents = 1, 1429 .flags = CLK_SET_RATE_PARENT, 1430 .ops = &clk_branch2_ops, 1431 }, 1432 }, 1433 }; 1434 1435 static struct clk_branch smmu_cpp_axi_clk = { 1436 .halt_reg = 0x3c18, 1437 .clkr = { 1438 .enable_reg = 0x3c18, 1439 .enable_mask = BIT(0), 1440 .hw.init = &(struct clk_init_data){ 1441 .name = "smmu_cpp_axi_clk", 1442 .parent_hws = (const struct clk_hw*[]){ 1443 &axi_clk_src.clkr.hw 1444 }, 1445 .num_parents = 1, 1446 .flags = CLK_SET_RATE_PARENT, 1447 .ops = &clk_branch2_ops, 1448 }, 1449 }, 1450 }; 1451 1452 static struct clk_branch smmu_jpeg_ahb_clk = { 1453 .halt_reg = 0x3c24, 1454 .clkr = { 1455 .enable_reg = 0x3c24, 1456 .enable_mask = BIT(0), 1457 .hw.init = &(struct clk_init_data){ 1458 .name = "smmu_jpeg_ahb_clk", 1459 .parent_hws = (const struct clk_hw*[]){ 1460 &ahb_clk_src.clkr.hw 1461 }, 1462 .num_parents = 1, 1463 .flags = CLK_SET_RATE_PARENT, 1464 .ops = &clk_branch2_ops, 1465 }, 1466 }, 1467 }; 1468 1469 static struct clk_branch smmu_jpeg_axi_clk = { 1470 .halt_reg = 0x3c28, 1471 .clkr = { 1472 .enable_reg = 0x3c28, 1473 .enable_mask = BIT(0), 1474 .hw.init = &(struct clk_init_data){ 1475 .name = "smmu_jpeg_axi_clk", 1476 .parent_hws = (const struct clk_hw*[]){ 1477 &axi_clk_src.clkr.hw 1478 }, 1479 .num_parents = 1, 1480 .flags = CLK_SET_RATE_PARENT, 1481 .ops = &clk_branch2_ops, 1482 }, 1483 }, 1484 }; 1485 1486 static struct clk_branch mmagic_mdss_axi_clk = { 1487 .halt_reg = 0x2474, 1488 .clkr = { 1489 .enable_reg = 0x2474, 1490 .enable_mask = BIT(0), 1491 .hw.init = &(struct clk_init_data){ 1492 .name = "mmagic_mdss_axi_clk", 1493 .parent_hws = (const struct clk_hw*[]){ 1494 &axi_clk_src.clkr.hw 1495 }, 1496 .num_parents = 1, 1497 .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 1498 .ops = &clk_branch2_ops, 1499 }, 1500 }, 1501 }; 1502 1503 static struct clk_branch mmagic_mdss_noc_cfg_ahb_clk = { 1504 .halt_reg = 0x2478, 1505 .clkr = { 1506 .enable_reg = 0x2478, 1507 .enable_mask = BIT(0), 1508 .hw.init = &(struct clk_init_data){ 1509 .name = "mmagic_mdss_noc_cfg_ahb_clk", 1510 .parent_data = (const struct clk_parent_data[]){ 1511 { .fw_name = "gcc_mmss_noc_cfg_ahb_clk", .name = "gcc_mmss_noc_cfg_ahb_clk" }, 1512 }, 1513 .num_parents = 1, 1514 .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 1515 .ops = &clk_branch2_ops, 1516 }, 1517 }, 1518 }; 1519 1520 static struct clk_branch smmu_rot_ahb_clk = { 1521 .halt_reg = 0x2444, 1522 .clkr = { 1523 .enable_reg = 0x2444, 1524 .enable_mask = BIT(0), 1525 .hw.init = &(struct clk_init_data){ 1526 .name = "smmu_rot_ahb_clk", 1527 .parent_hws = (const struct clk_hw*[]){ 1528 &ahb_clk_src.clkr.hw 1529 }, 1530 .num_parents = 1, 1531 .flags = CLK_SET_RATE_PARENT, 1532 .ops = &clk_branch2_ops, 1533 }, 1534 }, 1535 }; 1536 1537 static struct clk_branch smmu_rot_axi_clk = { 1538 .halt_reg = 0x2448, 1539 .clkr = { 1540 .enable_reg = 0x2448, 1541 .enable_mask = BIT(0), 1542 .hw.init = &(struct clk_init_data){ 1543 .name = "smmu_rot_axi_clk", 1544 .parent_hws = (const struct clk_hw*[]){ 1545 &axi_clk_src.clkr.hw 1546 }, 1547 .num_parents = 1, 1548 .flags = CLK_SET_RATE_PARENT, 1549 .ops = &clk_branch2_ops, 1550 }, 1551 }, 1552 }; 1553 1554 static struct clk_branch smmu_mdp_ahb_clk = { 1555 .halt_reg = 0x2454, 1556 .clkr = { 1557 .enable_reg = 0x2454, 1558 .enable_mask = BIT(0), 1559 .hw.init = &(struct clk_init_data){ 1560 .name = "smmu_mdp_ahb_clk", 1561 .parent_hws = (const struct clk_hw*[]){ 1562 &ahb_clk_src.clkr.hw 1563 }, 1564 .num_parents = 1, 1565 .flags = CLK_SET_RATE_PARENT, 1566 .ops = &clk_branch2_ops, 1567 }, 1568 }, 1569 }; 1570 1571 static struct clk_branch smmu_mdp_axi_clk = { 1572 .halt_reg = 0x2458, 1573 .clkr = { 1574 .enable_reg = 0x2458, 1575 .enable_mask = BIT(0), 1576 .hw.init = &(struct clk_init_data){ 1577 .name = "smmu_mdp_axi_clk", 1578 .parent_hws = (const struct clk_hw*[]){ 1579 &axi_clk_src.clkr.hw 1580 }, 1581 .num_parents = 1, 1582 .flags = CLK_SET_RATE_PARENT, 1583 .ops = &clk_branch2_ops, 1584 }, 1585 }, 1586 }; 1587 1588 static struct clk_branch mmagic_video_axi_clk = { 1589 .halt_reg = 0x1194, 1590 .clkr = { 1591 .enable_reg = 0x1194, 1592 .enable_mask = BIT(0), 1593 .hw.init = &(struct clk_init_data){ 1594 .name = "mmagic_video_axi_clk", 1595 .parent_hws = (const struct clk_hw*[]){ 1596 &axi_clk_src.clkr.hw 1597 }, 1598 .num_parents = 1, 1599 .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 1600 .ops = &clk_branch2_ops, 1601 }, 1602 }, 1603 }; 1604 1605 static struct clk_branch mmagic_video_noc_cfg_ahb_clk = { 1606 .halt_reg = 0x1198, 1607 .clkr = { 1608 .enable_reg = 0x1198, 1609 .enable_mask = BIT(0), 1610 .hw.init = &(struct clk_init_data){ 1611 .name = "mmagic_video_noc_cfg_ahb_clk", 1612 .parent_data = (const struct clk_parent_data[]){ 1613 { .fw_name = "gcc_mmss_noc_cfg_ahb_clk", .name = "gcc_mmss_noc_cfg_ahb_clk" }, 1614 }, 1615 .num_parents = 1, 1616 .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, 1617 .ops = &clk_branch2_ops, 1618 }, 1619 }, 1620 }; 1621 1622 static struct clk_branch smmu_video_ahb_clk = { 1623 .halt_reg = 0x1174, 1624 .clkr = { 1625 .enable_reg = 0x1174, 1626 .enable_mask = BIT(0), 1627 .hw.init = &(struct clk_init_data){ 1628 .name = "smmu_video_ahb_clk", 1629 .parent_hws = (const struct clk_hw*[]){ 1630 &ahb_clk_src.clkr.hw 1631 }, 1632 .num_parents = 1, 1633 .flags = CLK_SET_RATE_PARENT, 1634 .ops = &clk_branch2_ops, 1635 }, 1636 }, 1637 }; 1638 1639 static struct clk_branch smmu_video_axi_clk = { 1640 .halt_reg = 0x1178, 1641 .clkr = { 1642 .enable_reg = 0x1178, 1643 .enable_mask = BIT(0), 1644 .hw.init = &(struct clk_init_data){ 1645 .name = "smmu_video_axi_clk", 1646 .parent_hws = (const struct clk_hw*[]){ 1647 &axi_clk_src.clkr.hw 1648 }, 1649 .num_parents = 1, 1650 .flags = CLK_SET_RATE_PARENT, 1651 .ops = &clk_branch2_ops, 1652 }, 1653 }, 1654 }; 1655 1656 static struct clk_branch mmagic_bimc_noc_cfg_ahb_clk = { 1657 .halt_reg = 0x5298, 1658 .clkr = { 1659 .enable_reg = 0x5298, 1660 .enable_mask = BIT(0), 1661 .hw.init = &(struct clk_init_data){ 1662 .name = "mmagic_bimc_noc_cfg_ahb_clk", 1663 .parent_data = (const struct clk_parent_data[]){ 1664 { .fw_name = "gcc_mmss_noc_cfg_ahb_clk", .name = "gcc_mmss_noc_cfg_ahb_clk" }, 1665 }, 1666 .num_parents = 1, 1667 .flags = CLK_SET_RATE_PARENT, 1668 .ops = &clk_branch2_ops, 1669 }, 1670 }, 1671 }; 1672 1673 static struct clk_branch gpu_gx_gfx3d_clk = { 1674 .halt_reg = 0x4028, 1675 .clkr = { 1676 .enable_reg = 0x4028, 1677 .enable_mask = BIT(0), 1678 .hw.init = &(struct clk_init_data){ 1679 .name = "gpu_gx_gfx3d_clk", 1680 .parent_hws = (const struct clk_hw*[]){ 1681 &gfx3d_clk_src.rcg.clkr.hw 1682 }, 1683 .num_parents = 1, 1684 .flags = CLK_SET_RATE_PARENT, 1685 .ops = &clk_branch2_ops, 1686 }, 1687 }, 1688 }; 1689 1690 static struct clk_branch gpu_gx_rbbmtimer_clk = { 1691 .halt_reg = 0x40b0, 1692 .clkr = { 1693 .enable_reg = 0x40b0, 1694 .enable_mask = BIT(0), 1695 .hw.init = &(struct clk_init_data){ 1696 .name = "gpu_gx_rbbmtimer_clk", 1697 .parent_hws = (const struct clk_hw*[]){ 1698 &rbbmtimer_clk_src.clkr.hw 1699 }, 1700 .num_parents = 1, 1701 .flags = CLK_SET_RATE_PARENT, 1702 .ops = &clk_branch2_ops, 1703 }, 1704 }, 1705 }; 1706 1707 static struct clk_branch gpu_ahb_clk = { 1708 .halt_reg = 0x403c, 1709 .clkr = { 1710 .enable_reg = 0x403c, 1711 .enable_mask = BIT(0), 1712 .hw.init = &(struct clk_init_data){ 1713 .name = "gpu_ahb_clk", 1714 .parent_hws = (const struct clk_hw*[]){ 1715 &ahb_clk_src.clkr.hw 1716 }, 1717 .num_parents = 1, 1718 .flags = CLK_SET_RATE_PARENT, 1719 .ops = &clk_branch2_ops, 1720 }, 1721 }, 1722 }; 1723 1724 static struct clk_branch gpu_aon_isense_clk = { 1725 .halt_reg = 0x4044, 1726 .clkr = { 1727 .enable_reg = 0x4044, 1728 .enable_mask = BIT(0), 1729 .hw.init = &(struct clk_init_data){ 1730 .name = "gpu_aon_isense_clk", 1731 .parent_hws = (const struct clk_hw*[]){ 1732 &isense_clk_src.clkr.hw 1733 }, 1734 .num_parents = 1, 1735 .flags = CLK_SET_RATE_PARENT, 1736 .ops = &clk_branch2_ops, 1737 }, 1738 }, 1739 }; 1740 1741 static struct clk_branch vmem_maxi_clk = { 1742 .halt_reg = 0x1204, 1743 .clkr = { 1744 .enable_reg = 0x1204, 1745 .enable_mask = BIT(0), 1746 .hw.init = &(struct clk_init_data){ 1747 .name = "vmem_maxi_clk", 1748 .parent_hws = (const struct clk_hw*[]){ 1749 &maxi_clk_src.clkr.hw 1750 }, 1751 .num_parents = 1, 1752 .flags = CLK_SET_RATE_PARENT, 1753 .ops = &clk_branch2_ops, 1754 }, 1755 }, 1756 }; 1757 1758 static struct clk_branch vmem_ahb_clk = { 1759 .halt_reg = 0x1208, 1760 .clkr = { 1761 .enable_reg = 0x1208, 1762 .enable_mask = BIT(0), 1763 .hw.init = &(struct clk_init_data){ 1764 .name = "vmem_ahb_clk", 1765 .parent_hws = (const struct clk_hw*[]){ 1766 &ahb_clk_src.clkr.hw 1767 }, 1768 .num_parents = 1, 1769 .flags = CLK_SET_RATE_PARENT, 1770 .ops = &clk_branch2_ops, 1771 }, 1772 }, 1773 }; 1774 1775 static struct clk_branch mmss_rbcpr_clk = { 1776 .halt_reg = 0x4084, 1777 .clkr = { 1778 .enable_reg = 0x4084, 1779 .enable_mask = BIT(0), 1780 .hw.init = &(struct clk_init_data){ 1781 .name = "mmss_rbcpr_clk", 1782 .parent_hws = (const struct clk_hw*[]){ 1783 &rbcpr_clk_src.clkr.hw 1784 }, 1785 .num_parents = 1, 1786 .flags = CLK_SET_RATE_PARENT, 1787 .ops = &clk_branch2_ops, 1788 }, 1789 }, 1790 }; 1791 1792 static struct clk_branch mmss_rbcpr_ahb_clk = { 1793 .halt_reg = 0x4088, 1794 .clkr = { 1795 .enable_reg = 0x4088, 1796 .enable_mask = BIT(0), 1797 .hw.init = &(struct clk_init_data){ 1798 .name = "mmss_rbcpr_ahb_clk", 1799 .parent_hws = (const struct clk_hw*[]){ 1800 &ahb_clk_src.clkr.hw 1801 }, 1802 .num_parents = 1, 1803 .flags = CLK_SET_RATE_PARENT, 1804 .ops = &clk_branch2_ops, 1805 }, 1806 }, 1807 }; 1808 1809 static struct clk_branch video_core_clk = { 1810 .halt_reg = 0x1028, 1811 .clkr = { 1812 .enable_reg = 0x1028, 1813 .enable_mask = BIT(0), 1814 .hw.init = &(struct clk_init_data){ 1815 .name = "video_core_clk", 1816 .parent_hws = (const struct clk_hw*[]){ 1817 &video_core_clk_src.clkr.hw 1818 }, 1819 .num_parents = 1, 1820 .flags = CLK_SET_RATE_PARENT, 1821 .ops = &clk_branch2_ops, 1822 }, 1823 }, 1824 }; 1825 1826 static struct clk_branch video_axi_clk = { 1827 .halt_reg = 0x1034, 1828 .clkr = { 1829 .enable_reg = 0x1034, 1830 .enable_mask = BIT(0), 1831 .hw.init = &(struct clk_init_data){ 1832 .name = "video_axi_clk", 1833 .parent_hws = (const struct clk_hw*[]){ 1834 &axi_clk_src.clkr.hw 1835 }, 1836 .num_parents = 1, 1837 .flags = CLK_SET_RATE_PARENT, 1838 .ops = &clk_branch2_ops, 1839 }, 1840 }, 1841 }; 1842 1843 static struct clk_branch video_maxi_clk = { 1844 .halt_reg = 0x1038, 1845 .clkr = { 1846 .enable_reg = 0x1038, 1847 .enable_mask = BIT(0), 1848 .hw.init = &(struct clk_init_data){ 1849 .name = "video_maxi_clk", 1850 .parent_hws = (const struct clk_hw*[]){ 1851 &maxi_clk_src.clkr.hw 1852 }, 1853 .num_parents = 1, 1854 .flags = CLK_SET_RATE_PARENT, 1855 .ops = &clk_branch2_ops, 1856 }, 1857 }, 1858 }; 1859 1860 static struct clk_branch video_ahb_clk = { 1861 .halt_reg = 0x1030, 1862 .clkr = { 1863 .enable_reg = 0x1030, 1864 .enable_mask = BIT(0), 1865 .hw.init = &(struct clk_init_data){ 1866 .name = "video_ahb_clk", 1867 .parent_hws = (const struct clk_hw*[]){ 1868 &ahb_clk_src.clkr.hw 1869 }, 1870 .num_parents = 1, 1871 .flags = CLK_SET_RATE_PARENT, 1872 .ops = &clk_branch2_ops, 1873 }, 1874 }, 1875 }; 1876 1877 static struct clk_branch video_subcore0_clk = { 1878 .halt_reg = 0x1048, 1879 .clkr = { 1880 .enable_reg = 0x1048, 1881 .enable_mask = BIT(0), 1882 .hw.init = &(struct clk_init_data){ 1883 .name = "video_subcore0_clk", 1884 .parent_hws = (const struct clk_hw*[]){ 1885 &video_subcore0_clk_src.clkr.hw 1886 }, 1887 .num_parents = 1, 1888 .flags = CLK_SET_RATE_PARENT, 1889 .ops = &clk_branch2_ops, 1890 }, 1891 }, 1892 }; 1893 1894 static struct clk_branch video_subcore1_clk = { 1895 .halt_reg = 0x104c, 1896 .clkr = { 1897 .enable_reg = 0x104c, 1898 .enable_mask = BIT(0), 1899 .hw.init = &(struct clk_init_data){ 1900 .name = "video_subcore1_clk", 1901 .parent_hws = (const struct clk_hw*[]){ 1902 &video_subcore1_clk_src.clkr.hw 1903 }, 1904 .num_parents = 1, 1905 .flags = CLK_SET_RATE_PARENT, 1906 .ops = &clk_branch2_ops, 1907 }, 1908 }, 1909 }; 1910 1911 static struct clk_branch mdss_ahb_clk = { 1912 .halt_reg = 0x2308, 1913 .clkr = { 1914 .enable_reg = 0x2308, 1915 .enable_mask = BIT(0), 1916 .hw.init = &(struct clk_init_data){ 1917 .name = "mdss_ahb_clk", 1918 .parent_hws = (const struct clk_hw*[]){ 1919 &ahb_clk_src.clkr.hw 1920 }, 1921 .num_parents = 1, 1922 .flags = CLK_SET_RATE_PARENT, 1923 .ops = &clk_branch2_ops, 1924 }, 1925 }, 1926 }; 1927 1928 static struct clk_branch mdss_hdmi_ahb_clk = { 1929 .halt_reg = 0x230c, 1930 .clkr = { 1931 .enable_reg = 0x230c, 1932 .enable_mask = BIT(0), 1933 .hw.init = &(struct clk_init_data){ 1934 .name = "mdss_hdmi_ahb_clk", 1935 .parent_hws = (const struct clk_hw*[]){ 1936 &ahb_clk_src.clkr.hw 1937 }, 1938 .num_parents = 1, 1939 .flags = CLK_SET_RATE_PARENT, 1940 .ops = &clk_branch2_ops, 1941 }, 1942 }, 1943 }; 1944 1945 static struct clk_branch mdss_axi_clk = { 1946 .halt_reg = 0x2310, 1947 .clkr = { 1948 .enable_reg = 0x2310, 1949 .enable_mask = BIT(0), 1950 .hw.init = &(struct clk_init_data){ 1951 .name = "mdss_axi_clk", 1952 .parent_hws = (const struct clk_hw*[]){ 1953 &axi_clk_src.clkr.hw 1954 }, 1955 .num_parents = 1, 1956 .flags = CLK_SET_RATE_PARENT, 1957 .ops = &clk_branch2_ops, 1958 }, 1959 }, 1960 }; 1961 1962 static struct clk_branch mdss_pclk0_clk = { 1963 .halt_reg = 0x2314, 1964 .clkr = { 1965 .enable_reg = 0x2314, 1966 .enable_mask = BIT(0), 1967 .hw.init = &(struct clk_init_data){ 1968 .name = "mdss_pclk0_clk", 1969 .parent_hws = (const struct clk_hw*[]){ 1970 &pclk0_clk_src.clkr.hw 1971 }, 1972 .num_parents = 1, 1973 .flags = CLK_SET_RATE_PARENT, 1974 .ops = &clk_branch2_ops, 1975 }, 1976 }, 1977 }; 1978 1979 static struct clk_branch mdss_pclk1_clk = { 1980 .halt_reg = 0x2318, 1981 .clkr = { 1982 .enable_reg = 0x2318, 1983 .enable_mask = BIT(0), 1984 .hw.init = &(struct clk_init_data){ 1985 .name = "mdss_pclk1_clk", 1986 .parent_hws = (const struct clk_hw*[]){ 1987 &pclk1_clk_src.clkr.hw 1988 }, 1989 .num_parents = 1, 1990 .flags = CLK_SET_RATE_PARENT, 1991 .ops = &clk_branch2_ops, 1992 }, 1993 }, 1994 }; 1995 1996 static struct clk_branch mdss_mdp_clk = { 1997 .halt_reg = 0x231c, 1998 .clkr = { 1999 .enable_reg = 0x231c, 2000 .enable_mask = BIT(0), 2001 .hw.init = &(struct clk_init_data){ 2002 .name = "mdss_mdp_clk", 2003 .parent_hws = (const struct clk_hw*[]){ 2004 &mdp_clk_src.clkr.hw 2005 }, 2006 .num_parents = 1, 2007 .flags = CLK_SET_RATE_PARENT, 2008 .ops = &clk_branch2_ops, 2009 }, 2010 }, 2011 }; 2012 2013 static struct clk_branch mdss_extpclk_clk = { 2014 .halt_reg = 0x2324, 2015 .clkr = { 2016 .enable_reg = 0x2324, 2017 .enable_mask = BIT(0), 2018 .hw.init = &(struct clk_init_data){ 2019 .name = "mdss_extpclk_clk", 2020 .parent_hws = (const struct clk_hw*[]){ 2021 &extpclk_clk_src.clkr.hw 2022 }, 2023 .num_parents = 1, 2024 .flags = CLK_SET_RATE_PARENT, 2025 .ops = &clk_branch2_ops, 2026 }, 2027 }, 2028 }; 2029 2030 static struct clk_branch mdss_vsync_clk = { 2031 .halt_reg = 0x2328, 2032 .clkr = { 2033 .enable_reg = 0x2328, 2034 .enable_mask = BIT(0), 2035 .hw.init = &(struct clk_init_data){ 2036 .name = "mdss_vsync_clk", 2037 .parent_hws = (const struct clk_hw*[]){ 2038 &vsync_clk_src.clkr.hw 2039 }, 2040 .num_parents = 1, 2041 .flags = CLK_SET_RATE_PARENT, 2042 .ops = &clk_branch2_ops, 2043 }, 2044 }, 2045 }; 2046 2047 static struct clk_branch mdss_hdmi_clk = { 2048 .halt_reg = 0x2338, 2049 .clkr = { 2050 .enable_reg = 0x2338, 2051 .enable_mask = BIT(0), 2052 .hw.init = &(struct clk_init_data){ 2053 .name = "mdss_hdmi_clk", 2054 .parent_hws = (const struct clk_hw*[]){ 2055 &hdmi_clk_src.clkr.hw 2056 }, 2057 .num_parents = 1, 2058 .flags = CLK_SET_RATE_PARENT, 2059 .ops = &clk_branch2_ops, 2060 }, 2061 }, 2062 }; 2063 2064 static struct clk_branch mdss_byte0_clk = { 2065 .halt_reg = 0x233c, 2066 .clkr = { 2067 .enable_reg = 0x233c, 2068 .enable_mask = BIT(0), 2069 .hw.init = &(struct clk_init_data){ 2070 .name = "mdss_byte0_clk", 2071 .parent_hws = (const struct clk_hw*[]){ 2072 &byte0_clk_src.clkr.hw 2073 }, 2074 .num_parents = 1, 2075 .flags = CLK_SET_RATE_PARENT, 2076 .ops = &clk_branch2_ops, 2077 }, 2078 }, 2079 }; 2080 2081 static struct clk_branch mdss_byte1_clk = { 2082 .halt_reg = 0x2340, 2083 .clkr = { 2084 .enable_reg = 0x2340, 2085 .enable_mask = BIT(0), 2086 .hw.init = &(struct clk_init_data){ 2087 .name = "mdss_byte1_clk", 2088 .parent_hws = (const struct clk_hw*[]){ 2089 &byte1_clk_src.clkr.hw 2090 }, 2091 .num_parents = 1, 2092 .flags = CLK_SET_RATE_PARENT, 2093 .ops = &clk_branch2_ops, 2094 }, 2095 }, 2096 }; 2097 2098 static struct clk_branch mdss_esc0_clk = { 2099 .halt_reg = 0x2344, 2100 .clkr = { 2101 .enable_reg = 0x2344, 2102 .enable_mask = BIT(0), 2103 .hw.init = &(struct clk_init_data){ 2104 .name = "mdss_esc0_clk", 2105 .parent_hws = (const struct clk_hw*[]){ 2106 &esc0_clk_src.clkr.hw 2107 }, 2108 .num_parents = 1, 2109 .flags = CLK_SET_RATE_PARENT, 2110 .ops = &clk_branch2_ops, 2111 }, 2112 }, 2113 }; 2114 2115 static struct clk_branch mdss_esc1_clk = { 2116 .halt_reg = 0x2348, 2117 .clkr = { 2118 .enable_reg = 0x2348, 2119 .enable_mask = BIT(0), 2120 .hw.init = &(struct clk_init_data){ 2121 .name = "mdss_esc1_clk", 2122 .parent_hws = (const struct clk_hw*[]){ 2123 &esc1_clk_src.clkr.hw 2124 }, 2125 .num_parents = 1, 2126 .flags = CLK_SET_RATE_PARENT, 2127 .ops = &clk_branch2_ops, 2128 }, 2129 }, 2130 }; 2131 2132 static struct clk_branch camss_top_ahb_clk = { 2133 .halt_reg = 0x3484, 2134 .clkr = { 2135 .enable_reg = 0x3484, 2136 .enable_mask = BIT(0), 2137 .hw.init = &(struct clk_init_data){ 2138 .name = "camss_top_ahb_clk", 2139 .parent_hws = (const struct clk_hw*[]){ 2140 &ahb_clk_src.clkr.hw 2141 }, 2142 .num_parents = 1, 2143 .flags = CLK_SET_RATE_PARENT, 2144 .ops = &clk_branch2_ops, 2145 }, 2146 }, 2147 }; 2148 2149 static struct clk_branch camss_ahb_clk = { 2150 .halt_reg = 0x348c, 2151 .clkr = { 2152 .enable_reg = 0x348c, 2153 .enable_mask = BIT(0), 2154 .hw.init = &(struct clk_init_data){ 2155 .name = "camss_ahb_clk", 2156 .parent_hws = (const struct clk_hw*[]){ 2157 &ahb_clk_src.clkr.hw 2158 }, 2159 .num_parents = 1, 2160 .flags = CLK_SET_RATE_PARENT, 2161 .ops = &clk_branch2_ops, 2162 }, 2163 }, 2164 }; 2165 2166 static struct clk_branch camss_micro_ahb_clk = { 2167 .halt_reg = 0x3494, 2168 .clkr = { 2169 .enable_reg = 0x3494, 2170 .enable_mask = BIT(0), 2171 .hw.init = &(struct clk_init_data){ 2172 .name = "camss_micro_ahb_clk", 2173 .parent_hws = (const struct clk_hw*[]){ 2174 &ahb_clk_src.clkr.hw 2175 }, 2176 .num_parents = 1, 2177 .flags = CLK_SET_RATE_PARENT, 2178 .ops = &clk_branch2_ops, 2179 }, 2180 }, 2181 }; 2182 2183 static struct clk_branch camss_gp0_clk = { 2184 .halt_reg = 0x3444, 2185 .clkr = { 2186 .enable_reg = 0x3444, 2187 .enable_mask = BIT(0), 2188 .hw.init = &(struct clk_init_data){ 2189 .name = "camss_gp0_clk", 2190 .parent_hws = (const struct clk_hw*[]){ 2191 &camss_gp0_clk_src.clkr.hw 2192 }, 2193 .num_parents = 1, 2194 .flags = CLK_SET_RATE_PARENT, 2195 .ops = &clk_branch2_ops, 2196 }, 2197 }, 2198 }; 2199 2200 static struct clk_branch camss_gp1_clk = { 2201 .halt_reg = 0x3474, 2202 .clkr = { 2203 .enable_reg = 0x3474, 2204 .enable_mask = BIT(0), 2205 .hw.init = &(struct clk_init_data){ 2206 .name = "camss_gp1_clk", 2207 .parent_hws = (const struct clk_hw*[]){ 2208 &camss_gp1_clk_src.clkr.hw 2209 }, 2210 .num_parents = 1, 2211 .flags = CLK_SET_RATE_PARENT, 2212 .ops = &clk_branch2_ops, 2213 }, 2214 }, 2215 }; 2216 2217 static struct clk_branch camss_mclk0_clk = { 2218 .halt_reg = 0x3384, 2219 .clkr = { 2220 .enable_reg = 0x3384, 2221 .enable_mask = BIT(0), 2222 .hw.init = &(struct clk_init_data){ 2223 .name = "camss_mclk0_clk", 2224 .parent_hws = (const struct clk_hw*[]){ 2225 &mclk0_clk_src.clkr.hw 2226 }, 2227 .num_parents = 1, 2228 .flags = CLK_SET_RATE_PARENT, 2229 .ops = &clk_branch2_ops, 2230 }, 2231 }, 2232 }; 2233 2234 static struct clk_branch camss_mclk1_clk = { 2235 .halt_reg = 0x33b4, 2236 .clkr = { 2237 .enable_reg = 0x33b4, 2238 .enable_mask = BIT(0), 2239 .hw.init = &(struct clk_init_data){ 2240 .name = "camss_mclk1_clk", 2241 .parent_hws = (const struct clk_hw*[]){ 2242 &mclk1_clk_src.clkr.hw 2243 }, 2244 .num_parents = 1, 2245 .flags = CLK_SET_RATE_PARENT, 2246 .ops = &clk_branch2_ops, 2247 }, 2248 }, 2249 }; 2250 2251 static struct clk_branch camss_mclk2_clk = { 2252 .halt_reg = 0x33e4, 2253 .clkr = { 2254 .enable_reg = 0x33e4, 2255 .enable_mask = BIT(0), 2256 .hw.init = &(struct clk_init_data){ 2257 .name = "camss_mclk2_clk", 2258 .parent_hws = (const struct clk_hw*[]){ 2259 &mclk2_clk_src.clkr.hw 2260 }, 2261 .num_parents = 1, 2262 .flags = CLK_SET_RATE_PARENT, 2263 .ops = &clk_branch2_ops, 2264 }, 2265 }, 2266 }; 2267 2268 static struct clk_branch camss_mclk3_clk = { 2269 .halt_reg = 0x3414, 2270 .clkr = { 2271 .enable_reg = 0x3414, 2272 .enable_mask = BIT(0), 2273 .hw.init = &(struct clk_init_data){ 2274 .name = "camss_mclk3_clk", 2275 .parent_hws = (const struct clk_hw*[]){ 2276 &mclk3_clk_src.clkr.hw 2277 }, 2278 .num_parents = 1, 2279 .flags = CLK_SET_RATE_PARENT, 2280 .ops = &clk_branch2_ops, 2281 }, 2282 }, 2283 }; 2284 2285 static struct clk_branch camss_cci_clk = { 2286 .halt_reg = 0x3344, 2287 .clkr = { 2288 .enable_reg = 0x3344, 2289 .enable_mask = BIT(0), 2290 .hw.init = &(struct clk_init_data){ 2291 .name = "camss_cci_clk", 2292 .parent_hws = (const struct clk_hw*[]){ 2293 &cci_clk_src.clkr.hw 2294 }, 2295 .num_parents = 1, 2296 .flags = CLK_SET_RATE_PARENT, 2297 .ops = &clk_branch2_ops, 2298 }, 2299 }, 2300 }; 2301 2302 static struct clk_branch camss_cci_ahb_clk = { 2303 .halt_reg = 0x3348, 2304 .clkr = { 2305 .enable_reg = 0x3348, 2306 .enable_mask = BIT(0), 2307 .hw.init = &(struct clk_init_data){ 2308 .name = "camss_cci_ahb_clk", 2309 .parent_hws = (const struct clk_hw*[]){ 2310 &ahb_clk_src.clkr.hw 2311 }, 2312 .num_parents = 1, 2313 .flags = CLK_SET_RATE_PARENT, 2314 .ops = &clk_branch2_ops, 2315 }, 2316 }, 2317 }; 2318 2319 static struct clk_branch camss_csi0phytimer_clk = { 2320 .halt_reg = 0x3024, 2321 .clkr = { 2322 .enable_reg = 0x3024, 2323 .enable_mask = BIT(0), 2324 .hw.init = &(struct clk_init_data){ 2325 .name = "camss_csi0phytimer_clk", 2326 .parent_hws = (const struct clk_hw*[]){ 2327 &csi0phytimer_clk_src.clkr.hw 2328 }, 2329 .num_parents = 1, 2330 .flags = CLK_SET_RATE_PARENT, 2331 .ops = &clk_branch2_ops, 2332 }, 2333 }, 2334 }; 2335 2336 static struct clk_branch camss_csi1phytimer_clk = { 2337 .halt_reg = 0x3054, 2338 .clkr = { 2339 .enable_reg = 0x3054, 2340 .enable_mask = BIT(0), 2341 .hw.init = &(struct clk_init_data){ 2342 .name = "camss_csi1phytimer_clk", 2343 .parent_hws = (const struct clk_hw*[]){ 2344 &csi1phytimer_clk_src.clkr.hw 2345 }, 2346 .num_parents = 1, 2347 .flags = CLK_SET_RATE_PARENT, 2348 .ops = &clk_branch2_ops, 2349 }, 2350 }, 2351 }; 2352 2353 static struct clk_branch camss_csi2phytimer_clk = { 2354 .halt_reg = 0x3084, 2355 .clkr = { 2356 .enable_reg = 0x3084, 2357 .enable_mask = BIT(0), 2358 .hw.init = &(struct clk_init_data){ 2359 .name = "camss_csi2phytimer_clk", 2360 .parent_hws = (const struct clk_hw*[]){ 2361 &csi2phytimer_clk_src.clkr.hw 2362 }, 2363 .num_parents = 1, 2364 .flags = CLK_SET_RATE_PARENT, 2365 .ops = &clk_branch2_ops, 2366 }, 2367 }, 2368 }; 2369 2370 static struct clk_branch camss_csiphy0_3p_clk = { 2371 .halt_reg = 0x3234, 2372 .clkr = { 2373 .enable_reg = 0x3234, 2374 .enable_mask = BIT(0), 2375 .hw.init = &(struct clk_init_data){ 2376 .name = "camss_csiphy0_3p_clk", 2377 .parent_hws = (const struct clk_hw*[]){ 2378 &csiphy0_3p_clk_src.clkr.hw 2379 }, 2380 .num_parents = 1, 2381 .flags = CLK_SET_RATE_PARENT, 2382 .ops = &clk_branch2_ops, 2383 }, 2384 }, 2385 }; 2386 2387 static struct clk_branch camss_csiphy1_3p_clk = { 2388 .halt_reg = 0x3254, 2389 .clkr = { 2390 .enable_reg = 0x3254, 2391 .enable_mask = BIT(0), 2392 .hw.init = &(struct clk_init_data){ 2393 .name = "camss_csiphy1_3p_clk", 2394 .parent_hws = (const struct clk_hw*[]){ 2395 &csiphy1_3p_clk_src.clkr.hw 2396 }, 2397 .num_parents = 1, 2398 .flags = CLK_SET_RATE_PARENT, 2399 .ops = &clk_branch2_ops, 2400 }, 2401 }, 2402 }; 2403 2404 static struct clk_branch camss_csiphy2_3p_clk = { 2405 .halt_reg = 0x3274, 2406 .clkr = { 2407 .enable_reg = 0x3274, 2408 .enable_mask = BIT(0), 2409 .hw.init = &(struct clk_init_data){ 2410 .name = "camss_csiphy2_3p_clk", 2411 .parent_hws = (const struct clk_hw*[]){ 2412 &csiphy2_3p_clk_src.clkr.hw 2413 }, 2414 .num_parents = 1, 2415 .flags = CLK_SET_RATE_PARENT, 2416 .ops = &clk_branch2_ops, 2417 }, 2418 }, 2419 }; 2420 2421 static struct clk_branch camss_jpeg0_clk = { 2422 .halt_reg = 0x35a8, 2423 .clkr = { 2424 .enable_reg = 0x35a8, 2425 .enable_mask = BIT(0), 2426 .hw.init = &(struct clk_init_data){ 2427 .name = "camss_jpeg0_clk", 2428 .parent_hws = (const struct clk_hw*[]){ 2429 &jpeg0_clk_src.clkr.hw 2430 }, 2431 .num_parents = 1, 2432 .flags = CLK_SET_RATE_PARENT, 2433 .ops = &clk_branch2_ops, 2434 }, 2435 }, 2436 }; 2437 2438 static struct clk_branch camss_jpeg2_clk = { 2439 .halt_reg = 0x35b0, 2440 .clkr = { 2441 .enable_reg = 0x35b0, 2442 .enable_mask = BIT(0), 2443 .hw.init = &(struct clk_init_data){ 2444 .name = "camss_jpeg2_clk", 2445 .parent_hws = (const struct clk_hw*[]){ 2446 &jpeg2_clk_src.clkr.hw 2447 }, 2448 .num_parents = 1, 2449 .flags = CLK_SET_RATE_PARENT, 2450 .ops = &clk_branch2_ops, 2451 }, 2452 }, 2453 }; 2454 2455 static struct clk_branch camss_jpeg_dma_clk = { 2456 .halt_reg = 0x35c0, 2457 .clkr = { 2458 .enable_reg = 0x35c0, 2459 .enable_mask = BIT(0), 2460 .hw.init = &(struct clk_init_data){ 2461 .name = "camss_jpeg_dma_clk", 2462 .parent_hws = (const struct clk_hw*[]){ 2463 &jpeg_dma_clk_src.clkr.hw 2464 }, 2465 .num_parents = 1, 2466 .flags = CLK_SET_RATE_PARENT, 2467 .ops = &clk_branch2_ops, 2468 }, 2469 }, 2470 }; 2471 2472 static struct clk_branch camss_jpeg_ahb_clk = { 2473 .halt_reg = 0x35b4, 2474 .clkr = { 2475 .enable_reg = 0x35b4, 2476 .enable_mask = BIT(0), 2477 .hw.init = &(struct clk_init_data){ 2478 .name = "camss_jpeg_ahb_clk", 2479 .parent_hws = (const struct clk_hw*[]){ 2480 &ahb_clk_src.clkr.hw 2481 }, 2482 .num_parents = 1, 2483 .flags = CLK_SET_RATE_PARENT, 2484 .ops = &clk_branch2_ops, 2485 }, 2486 }, 2487 }; 2488 2489 static struct clk_branch camss_jpeg_axi_clk = { 2490 .halt_reg = 0x35b8, 2491 .clkr = { 2492 .enable_reg = 0x35b8, 2493 .enable_mask = BIT(0), 2494 .hw.init = &(struct clk_init_data){ 2495 .name = "camss_jpeg_axi_clk", 2496 .parent_hws = (const struct clk_hw*[]){ 2497 &axi_clk_src.clkr.hw 2498 }, 2499 .num_parents = 1, 2500 .flags = CLK_SET_RATE_PARENT, 2501 .ops = &clk_branch2_ops, 2502 }, 2503 }, 2504 }; 2505 2506 static struct clk_branch camss_vfe_ahb_clk = { 2507 .halt_reg = 0x36b8, 2508 .clkr = { 2509 .enable_reg = 0x36b8, 2510 .enable_mask = BIT(0), 2511 .hw.init = &(struct clk_init_data){ 2512 .name = "camss_vfe_ahb_clk", 2513 .parent_hws = (const struct clk_hw*[]){ 2514 &ahb_clk_src.clkr.hw 2515 }, 2516 .num_parents = 1, 2517 .flags = CLK_SET_RATE_PARENT, 2518 .ops = &clk_branch2_ops, 2519 }, 2520 }, 2521 }; 2522 2523 static struct clk_branch camss_vfe_axi_clk = { 2524 .halt_reg = 0x36bc, 2525 .clkr = { 2526 .enable_reg = 0x36bc, 2527 .enable_mask = BIT(0), 2528 .hw.init = &(struct clk_init_data){ 2529 .name = "camss_vfe_axi_clk", 2530 .parent_hws = (const struct clk_hw*[]){ 2531 &axi_clk_src.clkr.hw 2532 }, 2533 .num_parents = 1, 2534 .flags = CLK_SET_RATE_PARENT, 2535 .ops = &clk_branch2_ops, 2536 }, 2537 }, 2538 }; 2539 2540 static struct clk_branch camss_vfe0_clk = { 2541 .halt_reg = 0x36a8, 2542 .clkr = { 2543 .enable_reg = 0x36a8, 2544 .enable_mask = BIT(0), 2545 .hw.init = &(struct clk_init_data){ 2546 .name = "camss_vfe0_clk", 2547 .parent_hws = (const struct clk_hw*[]){ 2548 &vfe0_clk_src.clkr.hw 2549 }, 2550 .num_parents = 1, 2551 .flags = CLK_SET_RATE_PARENT, 2552 .ops = &clk_branch2_ops, 2553 }, 2554 }, 2555 }; 2556 2557 static struct clk_branch camss_vfe0_stream_clk = { 2558 .halt_reg = 0x3720, 2559 .clkr = { 2560 .enable_reg = 0x3720, 2561 .enable_mask = BIT(0), 2562 .hw.init = &(struct clk_init_data){ 2563 .name = "camss_vfe0_stream_clk", 2564 .parent_hws = (const struct clk_hw*[]){ 2565 &vfe0_clk_src.clkr.hw 2566 }, 2567 .num_parents = 1, 2568 .flags = CLK_SET_RATE_PARENT, 2569 .ops = &clk_branch2_ops, 2570 }, 2571 }, 2572 }; 2573 2574 static struct clk_branch camss_vfe0_ahb_clk = { 2575 .halt_reg = 0x3668, 2576 .clkr = { 2577 .enable_reg = 0x3668, 2578 .enable_mask = BIT(0), 2579 .hw.init = &(struct clk_init_data){ 2580 .name = "camss_vfe0_ahb_clk", 2581 .parent_hws = (const struct clk_hw*[]){ 2582 &ahb_clk_src.clkr.hw 2583 }, 2584 .num_parents = 1, 2585 .flags = CLK_SET_RATE_PARENT, 2586 .ops = &clk_branch2_ops, 2587 }, 2588 }, 2589 }; 2590 2591 static struct clk_branch camss_vfe1_clk = { 2592 .halt_reg = 0x36ac, 2593 .clkr = { 2594 .enable_reg = 0x36ac, 2595 .enable_mask = BIT(0), 2596 .hw.init = &(struct clk_init_data){ 2597 .name = "camss_vfe1_clk", 2598 .parent_hws = (const struct clk_hw*[]){ 2599 &vfe1_clk_src.clkr.hw 2600 }, 2601 .num_parents = 1, 2602 .flags = CLK_SET_RATE_PARENT, 2603 .ops = &clk_branch2_ops, 2604 }, 2605 }, 2606 }; 2607 2608 static struct clk_branch camss_vfe1_stream_clk = { 2609 .halt_reg = 0x3724, 2610 .clkr = { 2611 .enable_reg = 0x3724, 2612 .enable_mask = BIT(0), 2613 .hw.init = &(struct clk_init_data){ 2614 .name = "camss_vfe1_stream_clk", 2615 .parent_hws = (const struct clk_hw*[]){ 2616 &vfe1_clk_src.clkr.hw 2617 }, 2618 .num_parents = 1, 2619 .flags = CLK_SET_RATE_PARENT, 2620 .ops = &clk_branch2_ops, 2621 }, 2622 }, 2623 }; 2624 2625 static struct clk_branch camss_vfe1_ahb_clk = { 2626 .halt_reg = 0x3678, 2627 .clkr = { 2628 .enable_reg = 0x3678, 2629 .enable_mask = BIT(0), 2630 .hw.init = &(struct clk_init_data){ 2631 .name = "camss_vfe1_ahb_clk", 2632 .parent_hws = (const struct clk_hw*[]){ 2633 &ahb_clk_src.clkr.hw 2634 }, 2635 .num_parents = 1, 2636 .flags = CLK_SET_RATE_PARENT, 2637 .ops = &clk_branch2_ops, 2638 }, 2639 }, 2640 }; 2641 2642 static struct clk_branch camss_csi_vfe0_clk = { 2643 .halt_reg = 0x3704, 2644 .clkr = { 2645 .enable_reg = 0x3704, 2646 .enable_mask = BIT(0), 2647 .hw.init = &(struct clk_init_data){ 2648 .name = "camss_csi_vfe0_clk", 2649 .parent_hws = (const struct clk_hw*[]){ 2650 &vfe0_clk_src.clkr.hw 2651 }, 2652 .num_parents = 1, 2653 .flags = CLK_SET_RATE_PARENT, 2654 .ops = &clk_branch2_ops, 2655 }, 2656 }, 2657 }; 2658 2659 static struct clk_branch camss_csi_vfe1_clk = { 2660 .halt_reg = 0x3714, 2661 .clkr = { 2662 .enable_reg = 0x3714, 2663 .enable_mask = BIT(0), 2664 .hw.init = &(struct clk_init_data){ 2665 .name = "camss_csi_vfe1_clk", 2666 .parent_hws = (const struct clk_hw*[]){ 2667 &vfe1_clk_src.clkr.hw 2668 }, 2669 .num_parents = 1, 2670 .flags = CLK_SET_RATE_PARENT, 2671 .ops = &clk_branch2_ops, 2672 }, 2673 }, 2674 }; 2675 2676 static struct clk_branch camss_cpp_vbif_ahb_clk = { 2677 .halt_reg = 0x36c8, 2678 .clkr = { 2679 .enable_reg = 0x36c8, 2680 .enable_mask = BIT(0), 2681 .hw.init = &(struct clk_init_data){ 2682 .name = "camss_cpp_vbif_ahb_clk", 2683 .parent_hws = (const struct clk_hw*[]){ 2684 &ahb_clk_src.clkr.hw 2685 }, 2686 .num_parents = 1, 2687 .flags = CLK_SET_RATE_PARENT, 2688 .ops = &clk_branch2_ops, 2689 }, 2690 }, 2691 }; 2692 2693 static struct clk_branch camss_cpp_axi_clk = { 2694 .halt_reg = 0x36c4, 2695 .clkr = { 2696 .enable_reg = 0x36c4, 2697 .enable_mask = BIT(0), 2698 .hw.init = &(struct clk_init_data){ 2699 .name = "camss_cpp_axi_clk", 2700 .parent_hws = (const struct clk_hw*[]){ 2701 &axi_clk_src.clkr.hw 2702 }, 2703 .num_parents = 1, 2704 .flags = CLK_SET_RATE_PARENT, 2705 .ops = &clk_branch2_ops, 2706 }, 2707 }, 2708 }; 2709 2710 static struct clk_branch camss_cpp_clk = { 2711 .halt_reg = 0x36b0, 2712 .clkr = { 2713 .enable_reg = 0x36b0, 2714 .enable_mask = BIT(0), 2715 .hw.init = &(struct clk_init_data){ 2716 .name = "camss_cpp_clk", 2717 .parent_hws = (const struct clk_hw*[]){ 2718 &cpp_clk_src.clkr.hw 2719 }, 2720 .num_parents = 1, 2721 .flags = CLK_SET_RATE_PARENT, 2722 .ops = &clk_branch2_ops, 2723 }, 2724 }, 2725 }; 2726 2727 static struct clk_branch camss_cpp_ahb_clk = { 2728 .halt_reg = 0x36b4, 2729 .clkr = { 2730 .enable_reg = 0x36b4, 2731 .enable_mask = BIT(0), 2732 .hw.init = &(struct clk_init_data){ 2733 .name = "camss_cpp_ahb_clk", 2734 .parent_hws = (const struct clk_hw*[]){ 2735 &ahb_clk_src.clkr.hw 2736 }, 2737 .num_parents = 1, 2738 .flags = CLK_SET_RATE_PARENT, 2739 .ops = &clk_branch2_ops, 2740 }, 2741 }, 2742 }; 2743 2744 static struct clk_branch camss_csi0_clk = { 2745 .halt_reg = 0x30b4, 2746 .clkr = { 2747 .enable_reg = 0x30b4, 2748 .enable_mask = BIT(0), 2749 .hw.init = &(struct clk_init_data){ 2750 .name = "camss_csi0_clk", 2751 .parent_hws = (const struct clk_hw*[]){ 2752 &csi0_clk_src.clkr.hw 2753 }, 2754 .num_parents = 1, 2755 .flags = CLK_SET_RATE_PARENT, 2756 .ops = &clk_branch2_ops, 2757 }, 2758 }, 2759 }; 2760 2761 static struct clk_branch camss_csi0_ahb_clk = { 2762 .halt_reg = 0x30bc, 2763 .clkr = { 2764 .enable_reg = 0x30bc, 2765 .enable_mask = BIT(0), 2766 .hw.init = &(struct clk_init_data){ 2767 .name = "camss_csi0_ahb_clk", 2768 .parent_hws = (const struct clk_hw*[]){ 2769 &ahb_clk_src.clkr.hw 2770 }, 2771 .num_parents = 1, 2772 .flags = CLK_SET_RATE_PARENT, 2773 .ops = &clk_branch2_ops, 2774 }, 2775 }, 2776 }; 2777 2778 static struct clk_branch camss_csi0phy_clk = { 2779 .halt_reg = 0x30c4, 2780 .clkr = { 2781 .enable_reg = 0x30c4, 2782 .enable_mask = BIT(0), 2783 .hw.init = &(struct clk_init_data){ 2784 .name = "camss_csi0phy_clk", 2785 .parent_hws = (const struct clk_hw*[]){ 2786 &csi0_clk_src.clkr.hw 2787 }, 2788 .num_parents = 1, 2789 .flags = CLK_SET_RATE_PARENT, 2790 .ops = &clk_branch2_ops, 2791 }, 2792 }, 2793 }; 2794 2795 static struct clk_branch camss_csi0rdi_clk = { 2796 .halt_reg = 0x30d4, 2797 .clkr = { 2798 .enable_reg = 0x30d4, 2799 .enable_mask = BIT(0), 2800 .hw.init = &(struct clk_init_data){ 2801 .name = "camss_csi0rdi_clk", 2802 .parent_hws = (const struct clk_hw*[]){ 2803 &csi0_clk_src.clkr.hw 2804 }, 2805 .num_parents = 1, 2806 .flags = CLK_SET_RATE_PARENT, 2807 .ops = &clk_branch2_ops, 2808 }, 2809 }, 2810 }; 2811 2812 static struct clk_branch camss_csi0pix_clk = { 2813 .halt_reg = 0x30e4, 2814 .clkr = { 2815 .enable_reg = 0x30e4, 2816 .enable_mask = BIT(0), 2817 .hw.init = &(struct clk_init_data){ 2818 .name = "camss_csi0pix_clk", 2819 .parent_hws = (const struct clk_hw*[]){ 2820 &csi0_clk_src.clkr.hw 2821 }, 2822 .num_parents = 1, 2823 .flags = CLK_SET_RATE_PARENT, 2824 .ops = &clk_branch2_ops, 2825 }, 2826 }, 2827 }; 2828 2829 static struct clk_branch camss_csi1_clk = { 2830 .halt_reg = 0x3124, 2831 .clkr = { 2832 .enable_reg = 0x3124, 2833 .enable_mask = BIT(0), 2834 .hw.init = &(struct clk_init_data){ 2835 .name = "camss_csi1_clk", 2836 .parent_hws = (const struct clk_hw*[]){ 2837 &csi1_clk_src.clkr.hw 2838 }, 2839 .num_parents = 1, 2840 .flags = CLK_SET_RATE_PARENT, 2841 .ops = &clk_branch2_ops, 2842 }, 2843 }, 2844 }; 2845 2846 static struct clk_branch camss_csi1_ahb_clk = { 2847 .halt_reg = 0x3128, 2848 .clkr = { 2849 .enable_reg = 0x3128, 2850 .enable_mask = BIT(0), 2851 .hw.init = &(struct clk_init_data){ 2852 .name = "camss_csi1_ahb_clk", 2853 .parent_hws = (const struct clk_hw*[]){ 2854 &ahb_clk_src.clkr.hw 2855 }, 2856 .num_parents = 1, 2857 .flags = CLK_SET_RATE_PARENT, 2858 .ops = &clk_branch2_ops, 2859 }, 2860 }, 2861 }; 2862 2863 static struct clk_branch camss_csi1phy_clk = { 2864 .halt_reg = 0x3134, 2865 .clkr = { 2866 .enable_reg = 0x3134, 2867 .enable_mask = BIT(0), 2868 .hw.init = &(struct clk_init_data){ 2869 .name = "camss_csi1phy_clk", 2870 .parent_hws = (const struct clk_hw*[]){ 2871 &csi1_clk_src.clkr.hw 2872 }, 2873 .num_parents = 1, 2874 .flags = CLK_SET_RATE_PARENT, 2875 .ops = &clk_branch2_ops, 2876 }, 2877 }, 2878 }; 2879 2880 static struct clk_branch camss_csi1rdi_clk = { 2881 .halt_reg = 0x3144, 2882 .clkr = { 2883 .enable_reg = 0x3144, 2884 .enable_mask = BIT(0), 2885 .hw.init = &(struct clk_init_data){ 2886 .name = "camss_csi1rdi_clk", 2887 .parent_hws = (const struct clk_hw*[]){ 2888 &csi1_clk_src.clkr.hw 2889 }, 2890 .num_parents = 1, 2891 .flags = CLK_SET_RATE_PARENT, 2892 .ops = &clk_branch2_ops, 2893 }, 2894 }, 2895 }; 2896 2897 static struct clk_branch camss_csi1pix_clk = { 2898 .halt_reg = 0x3154, 2899 .clkr = { 2900 .enable_reg = 0x3154, 2901 .enable_mask = BIT(0), 2902 .hw.init = &(struct clk_init_data){ 2903 .name = "camss_csi1pix_clk", 2904 .parent_hws = (const struct clk_hw*[]){ 2905 &csi1_clk_src.clkr.hw 2906 }, 2907 .num_parents = 1, 2908 .flags = CLK_SET_RATE_PARENT, 2909 .ops = &clk_branch2_ops, 2910 }, 2911 }, 2912 }; 2913 2914 static struct clk_branch camss_csi2_clk = { 2915 .halt_reg = 0x3184, 2916 .clkr = { 2917 .enable_reg = 0x3184, 2918 .enable_mask = BIT(0), 2919 .hw.init = &(struct clk_init_data){ 2920 .name = "camss_csi2_clk", 2921 .parent_hws = (const struct clk_hw*[]){ 2922 &csi2_clk_src.clkr.hw 2923 }, 2924 .num_parents = 1, 2925 .flags = CLK_SET_RATE_PARENT, 2926 .ops = &clk_branch2_ops, 2927 }, 2928 }, 2929 }; 2930 2931 static struct clk_branch camss_csi2_ahb_clk = { 2932 .halt_reg = 0x3188, 2933 .clkr = { 2934 .enable_reg = 0x3188, 2935 .enable_mask = BIT(0), 2936 .hw.init = &(struct clk_init_data){ 2937 .name = "camss_csi2_ahb_clk", 2938 .parent_hws = (const struct clk_hw*[]){ 2939 &ahb_clk_src.clkr.hw 2940 }, 2941 .num_parents = 1, 2942 .flags = CLK_SET_RATE_PARENT, 2943 .ops = &clk_branch2_ops, 2944 }, 2945 }, 2946 }; 2947 2948 static struct clk_branch camss_csi2phy_clk = { 2949 .halt_reg = 0x3194, 2950 .clkr = { 2951 .enable_reg = 0x3194, 2952 .enable_mask = BIT(0), 2953 .hw.init = &(struct clk_init_data){ 2954 .name = "camss_csi2phy_clk", 2955 .parent_hws = (const struct clk_hw*[]){ 2956 &csi2_clk_src.clkr.hw 2957 }, 2958 .num_parents = 1, 2959 .flags = CLK_SET_RATE_PARENT, 2960 .ops = &clk_branch2_ops, 2961 }, 2962 }, 2963 }; 2964 2965 static struct clk_branch camss_csi2rdi_clk = { 2966 .halt_reg = 0x31a4, 2967 .clkr = { 2968 .enable_reg = 0x31a4, 2969 .enable_mask = BIT(0), 2970 .hw.init = &(struct clk_init_data){ 2971 .name = "camss_csi2rdi_clk", 2972 .parent_hws = (const struct clk_hw*[]){ 2973 &csi2_clk_src.clkr.hw 2974 }, 2975 .num_parents = 1, 2976 .flags = CLK_SET_RATE_PARENT, 2977 .ops = &clk_branch2_ops, 2978 }, 2979 }, 2980 }; 2981 2982 static struct clk_branch camss_csi2pix_clk = { 2983 .halt_reg = 0x31b4, 2984 .clkr = { 2985 .enable_reg = 0x31b4, 2986 .enable_mask = BIT(0), 2987 .hw.init = &(struct clk_init_data){ 2988 .name = "camss_csi2pix_clk", 2989 .parent_hws = (const struct clk_hw*[]){ 2990 &csi2_clk_src.clkr.hw 2991 }, 2992 .num_parents = 1, 2993 .flags = CLK_SET_RATE_PARENT, 2994 .ops = &clk_branch2_ops, 2995 }, 2996 }, 2997 }; 2998 2999 static struct clk_branch camss_csi3_clk = { 3000 .halt_reg = 0x31e4, 3001 .clkr = { 3002 .enable_reg = 0x31e4, 3003 .enable_mask = BIT(0), 3004 .hw.init = &(struct clk_init_data){ 3005 .name = "camss_csi3_clk", 3006 .parent_hws = (const struct clk_hw*[]){ 3007 &csi3_clk_src.clkr.hw 3008 }, 3009 .num_parents = 1, 3010 .flags = CLK_SET_RATE_PARENT, 3011 .ops = &clk_branch2_ops, 3012 }, 3013 }, 3014 }; 3015 3016 static struct clk_branch camss_csi3_ahb_clk = { 3017 .halt_reg = 0x31e8, 3018 .clkr = { 3019 .enable_reg = 0x31e8, 3020 .enable_mask = BIT(0), 3021 .hw.init = &(struct clk_init_data){ 3022 .name = "camss_csi3_ahb_clk", 3023 .parent_hws = (const struct clk_hw*[]){ 3024 &ahb_clk_src.clkr.hw 3025 }, 3026 .num_parents = 1, 3027 .flags = CLK_SET_RATE_PARENT, 3028 .ops = &clk_branch2_ops, 3029 }, 3030 }, 3031 }; 3032 3033 static struct clk_branch camss_csi3phy_clk = { 3034 .halt_reg = 0x31f4, 3035 .clkr = { 3036 .enable_reg = 0x31f4, 3037 .enable_mask = BIT(0), 3038 .hw.init = &(struct clk_init_data){ 3039 .name = "camss_csi3phy_clk", 3040 .parent_hws = (const struct clk_hw*[]){ 3041 &csi3_clk_src.clkr.hw 3042 }, 3043 .num_parents = 1, 3044 .flags = CLK_SET_RATE_PARENT, 3045 .ops = &clk_branch2_ops, 3046 }, 3047 }, 3048 }; 3049 3050 static struct clk_branch camss_csi3rdi_clk = { 3051 .halt_reg = 0x3204, 3052 .clkr = { 3053 .enable_reg = 0x3204, 3054 .enable_mask = BIT(0), 3055 .hw.init = &(struct clk_init_data){ 3056 .name = "camss_csi3rdi_clk", 3057 .parent_hws = (const struct clk_hw*[]){ 3058 &csi3_clk_src.clkr.hw 3059 }, 3060 .num_parents = 1, 3061 .flags = CLK_SET_RATE_PARENT, 3062 .ops = &clk_branch2_ops, 3063 }, 3064 }, 3065 }; 3066 3067 static struct clk_branch camss_csi3pix_clk = { 3068 .halt_reg = 0x3214, 3069 .clkr = { 3070 .enable_reg = 0x3214, 3071 .enable_mask = BIT(0), 3072 .hw.init = &(struct clk_init_data){ 3073 .name = "camss_csi3pix_clk", 3074 .parent_hws = (const struct clk_hw*[]){ 3075 &csi3_clk_src.clkr.hw 3076 }, 3077 .num_parents = 1, 3078 .flags = CLK_SET_RATE_PARENT, 3079 .ops = &clk_branch2_ops, 3080 }, 3081 }, 3082 }; 3083 3084 static struct clk_branch camss_ispif_ahb_clk = { 3085 .halt_reg = 0x3224, 3086 .clkr = { 3087 .enable_reg = 0x3224, 3088 .enable_mask = BIT(0), 3089 .hw.init = &(struct clk_init_data){ 3090 .name = "camss_ispif_ahb_clk", 3091 .parent_hws = (const struct clk_hw*[]){ 3092 &ahb_clk_src.clkr.hw 3093 }, 3094 .num_parents = 1, 3095 .flags = CLK_SET_RATE_PARENT, 3096 .ops = &clk_branch2_ops, 3097 }, 3098 }, 3099 }; 3100 3101 static struct clk_branch fd_core_clk = { 3102 .halt_reg = 0x3b68, 3103 .clkr = { 3104 .enable_reg = 0x3b68, 3105 .enable_mask = BIT(0), 3106 .hw.init = &(struct clk_init_data){ 3107 .name = "fd_core_clk", 3108 .parent_hws = (const struct clk_hw*[]){ 3109 &fd_core_clk_src.clkr.hw 3110 }, 3111 .num_parents = 1, 3112 .flags = CLK_SET_RATE_PARENT, 3113 .ops = &clk_branch2_ops, 3114 }, 3115 }, 3116 }; 3117 3118 static struct clk_branch fd_core_uar_clk = { 3119 .halt_reg = 0x3b6c, 3120 .clkr = { 3121 .enable_reg = 0x3b6c, 3122 .enable_mask = BIT(0), 3123 .hw.init = &(struct clk_init_data){ 3124 .name = "fd_core_uar_clk", 3125 .parent_hws = (const struct clk_hw*[]){ 3126 &fd_core_clk_src.clkr.hw 3127 }, 3128 .num_parents = 1, 3129 .flags = CLK_SET_RATE_PARENT, 3130 .ops = &clk_branch2_ops, 3131 }, 3132 }, 3133 }; 3134 3135 static struct clk_branch fd_ahb_clk = { 3136 .halt_reg = 0x3ba74, 3137 .clkr = { 3138 .enable_reg = 0x3ba74, 3139 .enable_mask = BIT(0), 3140 .hw.init = &(struct clk_init_data){ 3141 .name = "fd_ahb_clk", 3142 .parent_hws = (const struct clk_hw*[]){ 3143 &ahb_clk_src.clkr.hw 3144 }, 3145 .num_parents = 1, 3146 .flags = CLK_SET_RATE_PARENT, 3147 .ops = &clk_branch2_ops, 3148 }, 3149 }, 3150 }; 3151 3152 static struct clk_hw *mmcc_msm8996_hws[] = { 3153 &gpll0_div.hw, 3154 }; 3155 3156 static struct gdsc mmagic_bimc_gdsc = { 3157 .gdscr = 0x529c, 3158 .pd = { 3159 .name = "mmagic_bimc", 3160 }, 3161 .pwrsts = PWRSTS_OFF_ON, 3162 .flags = ALWAYS_ON, 3163 }; 3164 3165 static struct gdsc mmagic_video_gdsc = { 3166 .gdscr = 0x119c, 3167 .gds_hw_ctrl = 0x120c, 3168 .pd = { 3169 .name = "mmagic_video", 3170 }, 3171 .pwrsts = PWRSTS_OFF_ON, 3172 .flags = VOTABLE | ALWAYS_ON, 3173 }; 3174 3175 static struct gdsc mmagic_mdss_gdsc = { 3176 .gdscr = 0x247c, 3177 .gds_hw_ctrl = 0x2480, 3178 .pd = { 3179 .name = "mmagic_mdss", 3180 }, 3181 .pwrsts = PWRSTS_OFF_ON, 3182 .flags = VOTABLE | ALWAYS_ON, 3183 }; 3184 3185 static struct gdsc mmagic_camss_gdsc = { 3186 .gdscr = 0x3c4c, 3187 .gds_hw_ctrl = 0x3c50, 3188 .pd = { 3189 .name = "mmagic_camss", 3190 }, 3191 .pwrsts = PWRSTS_OFF_ON, 3192 .flags = VOTABLE | ALWAYS_ON, 3193 }; 3194 3195 static struct gdsc venus_gdsc = { 3196 .gdscr = 0x1024, 3197 .cxcs = (unsigned int []){ 0x1028, 0x1034, 0x1038 }, 3198 .cxc_count = 3, 3199 .pd = { 3200 .name = "venus", 3201 }, 3202 .parent = &mmagic_video_gdsc.pd, 3203 .pwrsts = PWRSTS_OFF_ON, 3204 }; 3205 3206 static struct gdsc venus_core0_gdsc = { 3207 .gdscr = 0x1040, 3208 .cxcs = (unsigned int []){ 0x1048 }, 3209 .cxc_count = 1, 3210 .pd = { 3211 .name = "venus_core0", 3212 }, 3213 .parent = &venus_gdsc.pd, 3214 .pwrsts = PWRSTS_OFF_ON, 3215 .flags = HW_CTRL, 3216 }; 3217 3218 static struct gdsc venus_core1_gdsc = { 3219 .gdscr = 0x1044, 3220 .cxcs = (unsigned int []){ 0x104c }, 3221 .cxc_count = 1, 3222 .pd = { 3223 .name = "venus_core1", 3224 }, 3225 .parent = &venus_gdsc.pd, 3226 .pwrsts = PWRSTS_OFF_ON, 3227 .flags = HW_CTRL, 3228 }; 3229 3230 static struct gdsc camss_gdsc = { 3231 .gdscr = 0x34a0, 3232 .cxcs = (unsigned int []){ 0x36bc, 0x36c4 }, 3233 .cxc_count = 2, 3234 .pd = { 3235 .name = "camss", 3236 }, 3237 .parent = &mmagic_camss_gdsc.pd, 3238 .pwrsts = PWRSTS_OFF_ON, 3239 }; 3240 3241 static struct gdsc vfe0_gdsc = { 3242 .gdscr = 0x3664, 3243 .cxcs = (unsigned int []){ 0x36a8 }, 3244 .cxc_count = 1, 3245 .pd = { 3246 .name = "vfe0", 3247 }, 3248 .parent = &camss_gdsc.pd, 3249 .pwrsts = PWRSTS_OFF_ON, 3250 }; 3251 3252 static struct gdsc vfe1_gdsc = { 3253 .gdscr = 0x3674, 3254 .cxcs = (unsigned int []){ 0x36ac }, 3255 .cxc_count = 1, 3256 .pd = { 3257 .name = "vfe1", 3258 }, 3259 .parent = &camss_gdsc.pd, 3260 .pwrsts = PWRSTS_OFF_ON, 3261 }; 3262 3263 static struct gdsc jpeg_gdsc = { 3264 .gdscr = 0x35a4, 3265 .cxcs = (unsigned int []){ 0x35a8, 0x35b0, 0x35c0, 0x35b8 }, 3266 .cxc_count = 4, 3267 .pd = { 3268 .name = "jpeg", 3269 }, 3270 .parent = &camss_gdsc.pd, 3271 .pwrsts = PWRSTS_OFF_ON, 3272 }; 3273 3274 static struct gdsc cpp_gdsc = { 3275 .gdscr = 0x36d4, 3276 .cxcs = (unsigned int []){ 0x36b0 }, 3277 .cxc_count = 1, 3278 .pd = { 3279 .name = "cpp", 3280 }, 3281 .parent = &camss_gdsc.pd, 3282 .pwrsts = PWRSTS_OFF_ON, 3283 }; 3284 3285 static struct gdsc fd_gdsc = { 3286 .gdscr = 0x3b64, 3287 .cxcs = (unsigned int []){ 0x3b68, 0x3b6c }, 3288 .cxc_count = 2, 3289 .pd = { 3290 .name = "fd", 3291 }, 3292 .parent = &camss_gdsc.pd, 3293 .pwrsts = PWRSTS_OFF_ON, 3294 }; 3295 3296 static struct gdsc mdss_gdsc = { 3297 .gdscr = 0x2304, 3298 .cxcs = (unsigned int []){ 0x2310, 0x231c }, 3299 .cxc_count = 2, 3300 .pd = { 3301 .name = "mdss", 3302 }, 3303 .parent = &mmagic_mdss_gdsc.pd, 3304 .pwrsts = PWRSTS_OFF_ON, 3305 }; 3306 3307 static struct gdsc gpu_gdsc = { 3308 .gdscr = 0x4034, 3309 .gds_hw_ctrl = 0x4038, 3310 .pd = { 3311 .name = "gpu", 3312 }, 3313 .pwrsts = PWRSTS_OFF_ON, 3314 .flags = VOTABLE, 3315 }; 3316 3317 static struct gdsc gpu_gx_gdsc = { 3318 .gdscr = 0x4024, 3319 .clamp_io_ctrl = 0x4300, 3320 .cxcs = (unsigned int []){ 0x4028 }, 3321 .cxc_count = 1, 3322 .pd = { 3323 .name = "gpu_gx", 3324 }, 3325 .pwrsts = PWRSTS_OFF_ON, 3326 .parent = &gpu_gdsc.pd, 3327 .flags = CLAMP_IO, 3328 .supply = "vdd-gfx", 3329 }; 3330 3331 static struct clk_regmap *mmcc_msm8996_clocks[] = { 3332 [MMPLL0_EARLY] = &mmpll0_early.clkr, 3333 [MMPLL0_PLL] = &mmpll0.clkr, 3334 [MMPLL1_EARLY] = &mmpll1_early.clkr, 3335 [MMPLL1_PLL] = &mmpll1.clkr, 3336 [MMPLL2_EARLY] = &mmpll2_early.clkr, 3337 [MMPLL2_PLL] = &mmpll2.clkr, 3338 [MMPLL3_EARLY] = &mmpll3_early.clkr, 3339 [MMPLL3_PLL] = &mmpll3.clkr, 3340 [MMPLL4_EARLY] = &mmpll4_early.clkr, 3341 [MMPLL4_PLL] = &mmpll4.clkr, 3342 [MMPLL5_EARLY] = &mmpll5_early.clkr, 3343 [MMPLL5_PLL] = &mmpll5.clkr, 3344 [MMPLL8_EARLY] = &mmpll8_early.clkr, 3345 [MMPLL8_PLL] = &mmpll8.clkr, 3346 [MMPLL9_EARLY] = &mmpll9_early.clkr, 3347 [MMPLL9_PLL] = &mmpll9.clkr, 3348 [AHB_CLK_SRC] = &ahb_clk_src.clkr, 3349 [AXI_CLK_SRC] = &axi_clk_src.clkr, 3350 [MAXI_CLK_SRC] = &maxi_clk_src.clkr, 3351 [GFX3D_CLK_SRC] = &gfx3d_clk_src.rcg.clkr, 3352 [RBBMTIMER_CLK_SRC] = &rbbmtimer_clk_src.clkr, 3353 [ISENSE_CLK_SRC] = &isense_clk_src.clkr, 3354 [RBCPR_CLK_SRC] = &rbcpr_clk_src.clkr, 3355 [VIDEO_CORE_CLK_SRC] = &video_core_clk_src.clkr, 3356 [VIDEO_SUBCORE0_CLK_SRC] = &video_subcore0_clk_src.clkr, 3357 [VIDEO_SUBCORE1_CLK_SRC] = &video_subcore1_clk_src.clkr, 3358 [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr, 3359 [PCLK1_CLK_SRC] = &pclk1_clk_src.clkr, 3360 [MDP_CLK_SRC] = &mdp_clk_src.clkr, 3361 [EXTPCLK_CLK_SRC] = &extpclk_clk_src.clkr, 3362 [VSYNC_CLK_SRC] = &vsync_clk_src.clkr, 3363 [HDMI_CLK_SRC] = &hdmi_clk_src.clkr, 3364 [BYTE0_CLK_SRC] = &byte0_clk_src.clkr, 3365 [BYTE1_CLK_SRC] = &byte1_clk_src.clkr, 3366 [ESC0_CLK_SRC] = &esc0_clk_src.clkr, 3367 [ESC1_CLK_SRC] = &esc1_clk_src.clkr, 3368 [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr, 3369 [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr, 3370 [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr, 3371 [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr, 3372 [MCLK2_CLK_SRC] = &mclk2_clk_src.clkr, 3373 [MCLK3_CLK_SRC] = &mclk3_clk_src.clkr, 3374 [CCI_CLK_SRC] = &cci_clk_src.clkr, 3375 [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr, 3376 [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr, 3377 [CSI2PHYTIMER_CLK_SRC] = &csi2phytimer_clk_src.clkr, 3378 [CSIPHY0_3P_CLK_SRC] = &csiphy0_3p_clk_src.clkr, 3379 [CSIPHY1_3P_CLK_SRC] = &csiphy1_3p_clk_src.clkr, 3380 [CSIPHY2_3P_CLK_SRC] = &csiphy2_3p_clk_src.clkr, 3381 [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr, 3382 [JPEG2_CLK_SRC] = &jpeg2_clk_src.clkr, 3383 [JPEG_DMA_CLK_SRC] = &jpeg_dma_clk_src.clkr, 3384 [VFE0_CLK_SRC] = &vfe0_clk_src.clkr, 3385 [VFE1_CLK_SRC] = &vfe1_clk_src.clkr, 3386 [CPP_CLK_SRC] = &cpp_clk_src.clkr, 3387 [CSI0_CLK_SRC] = &csi0_clk_src.clkr, 3388 [CSI1_CLK_SRC] = &csi1_clk_src.clkr, 3389 [CSI2_CLK_SRC] = &csi2_clk_src.clkr, 3390 [CSI3_CLK_SRC] = &csi3_clk_src.clkr, 3391 [FD_CORE_CLK_SRC] = &fd_core_clk_src.clkr, 3392 [MMSS_MMAGIC_AHB_CLK] = &mmss_mmagic_ahb_clk.clkr, 3393 [MMSS_MMAGIC_CFG_AHB_CLK] = &mmss_mmagic_cfg_ahb_clk.clkr, 3394 [MMSS_MISC_AHB_CLK] = &mmss_misc_ahb_clk.clkr, 3395 [MMSS_MISC_CXO_CLK] = &mmss_misc_cxo_clk.clkr, 3396 [MMSS_MMAGIC_MAXI_CLK] = &mmss_mmagic_maxi_clk.clkr, 3397 [MMAGIC_CAMSS_AXI_CLK] = &mmagic_camss_axi_clk.clkr, 3398 [MMAGIC_CAMSS_NOC_CFG_AHB_CLK] = &mmagic_camss_noc_cfg_ahb_clk.clkr, 3399 [SMMU_VFE_AHB_CLK] = &smmu_vfe_ahb_clk.clkr, 3400 [SMMU_VFE_AXI_CLK] = &smmu_vfe_axi_clk.clkr, 3401 [SMMU_CPP_AHB_CLK] = &smmu_cpp_ahb_clk.clkr, 3402 [SMMU_CPP_AXI_CLK] = &smmu_cpp_axi_clk.clkr, 3403 [SMMU_JPEG_AHB_CLK] = &smmu_jpeg_ahb_clk.clkr, 3404 [SMMU_JPEG_AXI_CLK] = &smmu_jpeg_axi_clk.clkr, 3405 [MMAGIC_MDSS_AXI_CLK] = &mmagic_mdss_axi_clk.clkr, 3406 [MMAGIC_MDSS_NOC_CFG_AHB_CLK] = &mmagic_mdss_noc_cfg_ahb_clk.clkr, 3407 [SMMU_ROT_AHB_CLK] = &smmu_rot_ahb_clk.clkr, 3408 [SMMU_ROT_AXI_CLK] = &smmu_rot_axi_clk.clkr, 3409 [SMMU_MDP_AHB_CLK] = &smmu_mdp_ahb_clk.clkr, 3410 [SMMU_MDP_AXI_CLK] = &smmu_mdp_axi_clk.clkr, 3411 [MMAGIC_VIDEO_AXI_CLK] = &mmagic_video_axi_clk.clkr, 3412 [MMAGIC_VIDEO_NOC_CFG_AHB_CLK] = &mmagic_video_noc_cfg_ahb_clk.clkr, 3413 [SMMU_VIDEO_AHB_CLK] = &smmu_video_ahb_clk.clkr, 3414 [SMMU_VIDEO_AXI_CLK] = &smmu_video_axi_clk.clkr, 3415 [MMAGIC_BIMC_NOC_CFG_AHB_CLK] = &mmagic_bimc_noc_cfg_ahb_clk.clkr, 3416 [GPU_GX_GFX3D_CLK] = &gpu_gx_gfx3d_clk.clkr, 3417 [GPU_GX_RBBMTIMER_CLK] = &gpu_gx_rbbmtimer_clk.clkr, 3418 [GPU_AHB_CLK] = &gpu_ahb_clk.clkr, 3419 [GPU_AON_ISENSE_CLK] = &gpu_aon_isense_clk.clkr, 3420 [VMEM_MAXI_CLK] = &vmem_maxi_clk.clkr, 3421 [VMEM_AHB_CLK] = &vmem_ahb_clk.clkr, 3422 [MMSS_RBCPR_CLK] = &mmss_rbcpr_clk.clkr, 3423 [MMSS_RBCPR_AHB_CLK] = &mmss_rbcpr_ahb_clk.clkr, 3424 [VIDEO_CORE_CLK] = &video_core_clk.clkr, 3425 [VIDEO_AXI_CLK] = &video_axi_clk.clkr, 3426 [VIDEO_MAXI_CLK] = &video_maxi_clk.clkr, 3427 [VIDEO_AHB_CLK] = &video_ahb_clk.clkr, 3428 [VIDEO_SUBCORE0_CLK] = &video_subcore0_clk.clkr, 3429 [VIDEO_SUBCORE1_CLK] = &video_subcore1_clk.clkr, 3430 [MDSS_AHB_CLK] = &mdss_ahb_clk.clkr, 3431 [MDSS_HDMI_AHB_CLK] = &mdss_hdmi_ahb_clk.clkr, 3432 [MDSS_AXI_CLK] = &mdss_axi_clk.clkr, 3433 [MDSS_PCLK0_CLK] = &mdss_pclk0_clk.clkr, 3434 [MDSS_PCLK1_CLK] = &mdss_pclk1_clk.clkr, 3435 [MDSS_MDP_CLK] = &mdss_mdp_clk.clkr, 3436 [MDSS_EXTPCLK_CLK] = &mdss_extpclk_clk.clkr, 3437 [MDSS_VSYNC_CLK] = &mdss_vsync_clk.clkr, 3438 [MDSS_HDMI_CLK] = &mdss_hdmi_clk.clkr, 3439 [MDSS_BYTE0_CLK] = &mdss_byte0_clk.clkr, 3440 [MDSS_BYTE1_CLK] = &mdss_byte1_clk.clkr, 3441 [MDSS_ESC0_CLK] = &mdss_esc0_clk.clkr, 3442 [MDSS_ESC1_CLK] = &mdss_esc1_clk.clkr, 3443 [CAMSS_TOP_AHB_CLK] = &camss_top_ahb_clk.clkr, 3444 [CAMSS_AHB_CLK] = &camss_ahb_clk.clkr, 3445 [CAMSS_MICRO_AHB_CLK] = &camss_micro_ahb_clk.clkr, 3446 [CAMSS_GP0_CLK] = &camss_gp0_clk.clkr, 3447 [CAMSS_GP1_CLK] = &camss_gp1_clk.clkr, 3448 [CAMSS_MCLK0_CLK] = &camss_mclk0_clk.clkr, 3449 [CAMSS_MCLK1_CLK] = &camss_mclk1_clk.clkr, 3450 [CAMSS_MCLK2_CLK] = &camss_mclk2_clk.clkr, 3451 [CAMSS_MCLK3_CLK] = &camss_mclk3_clk.clkr, 3452 [CAMSS_CCI_CLK] = &camss_cci_clk.clkr, 3453 [CAMSS_CCI_AHB_CLK] = &camss_cci_ahb_clk.clkr, 3454 [CAMSS_CSI0PHYTIMER_CLK] = &camss_csi0phytimer_clk.clkr, 3455 [CAMSS_CSI1PHYTIMER_CLK] = &camss_csi1phytimer_clk.clkr, 3456 [CAMSS_CSI2PHYTIMER_CLK] = &camss_csi2phytimer_clk.clkr, 3457 [CAMSS_CSIPHY0_3P_CLK] = &camss_csiphy0_3p_clk.clkr, 3458 [CAMSS_CSIPHY1_3P_CLK] = &camss_csiphy1_3p_clk.clkr, 3459 [CAMSS_CSIPHY2_3P_CLK] = &camss_csiphy2_3p_clk.clkr, 3460 [CAMSS_JPEG0_CLK] = &camss_jpeg0_clk.clkr, 3461 [CAMSS_JPEG2_CLK] = &camss_jpeg2_clk.clkr, 3462 [CAMSS_JPEG_DMA_CLK] = &camss_jpeg_dma_clk.clkr, 3463 [CAMSS_JPEG_AHB_CLK] = &camss_jpeg_ahb_clk.clkr, 3464 [CAMSS_JPEG_AXI_CLK] = &camss_jpeg_axi_clk.clkr, 3465 [CAMSS_VFE_AHB_CLK] = &camss_vfe_ahb_clk.clkr, 3466 [CAMSS_VFE_AXI_CLK] = &camss_vfe_axi_clk.clkr, 3467 [CAMSS_VFE0_CLK] = &camss_vfe0_clk.clkr, 3468 [CAMSS_VFE0_STREAM_CLK] = &camss_vfe0_stream_clk.clkr, 3469 [CAMSS_VFE0_AHB_CLK] = &camss_vfe0_ahb_clk.clkr, 3470 [CAMSS_VFE1_CLK] = &camss_vfe1_clk.clkr, 3471 [CAMSS_VFE1_STREAM_CLK] = &camss_vfe1_stream_clk.clkr, 3472 [CAMSS_VFE1_AHB_CLK] = &camss_vfe1_ahb_clk.clkr, 3473 [CAMSS_CSI_VFE0_CLK] = &camss_csi_vfe0_clk.clkr, 3474 [CAMSS_CSI_VFE1_CLK] = &camss_csi_vfe1_clk.clkr, 3475 [CAMSS_CPP_VBIF_AHB_CLK] = &camss_cpp_vbif_ahb_clk.clkr, 3476 [CAMSS_CPP_AXI_CLK] = &camss_cpp_axi_clk.clkr, 3477 [CAMSS_CPP_CLK] = &camss_cpp_clk.clkr, 3478 [CAMSS_CPP_AHB_CLK] = &camss_cpp_ahb_clk.clkr, 3479 [CAMSS_CSI0_CLK] = &camss_csi0_clk.clkr, 3480 [CAMSS_CSI0_AHB_CLK] = &camss_csi0_ahb_clk.clkr, 3481 [CAMSS_CSI0PHY_CLK] = &camss_csi0phy_clk.clkr, 3482 [CAMSS_CSI0RDI_CLK] = &camss_csi0rdi_clk.clkr, 3483 [CAMSS_CSI0PIX_CLK] = &camss_csi0pix_clk.clkr, 3484 [CAMSS_CSI1_CLK] = &camss_csi1_clk.clkr, 3485 [CAMSS_CSI1_AHB_CLK] = &camss_csi1_ahb_clk.clkr, 3486 [CAMSS_CSI1PHY_CLK] = &camss_csi1phy_clk.clkr, 3487 [CAMSS_CSI1RDI_CLK] = &camss_csi1rdi_clk.clkr, 3488 [CAMSS_CSI1PIX_CLK] = &camss_csi1pix_clk.clkr, 3489 [CAMSS_CSI2_CLK] = &camss_csi2_clk.clkr, 3490 [CAMSS_CSI2_AHB_CLK] = &camss_csi2_ahb_clk.clkr, 3491 [CAMSS_CSI2PHY_CLK] = &camss_csi2phy_clk.clkr, 3492 [CAMSS_CSI2RDI_CLK] = &camss_csi2rdi_clk.clkr, 3493 [CAMSS_CSI2PIX_CLK] = &camss_csi2pix_clk.clkr, 3494 [CAMSS_CSI3_CLK] = &camss_csi3_clk.clkr, 3495 [CAMSS_CSI3_AHB_CLK] = &camss_csi3_ahb_clk.clkr, 3496 [CAMSS_CSI3PHY_CLK] = &camss_csi3phy_clk.clkr, 3497 [CAMSS_CSI3RDI_CLK] = &camss_csi3rdi_clk.clkr, 3498 [CAMSS_CSI3PIX_CLK] = &camss_csi3pix_clk.clkr, 3499 [CAMSS_ISPIF_AHB_CLK] = &camss_ispif_ahb_clk.clkr, 3500 [FD_CORE_CLK] = &fd_core_clk.clkr, 3501 [FD_CORE_UAR_CLK] = &fd_core_uar_clk.clkr, 3502 [FD_AHB_CLK] = &fd_ahb_clk.clkr, 3503 }; 3504 3505 static struct gdsc *mmcc_msm8996_gdscs[] = { 3506 [MMAGIC_BIMC_GDSC] = &mmagic_bimc_gdsc, 3507 [MMAGIC_VIDEO_GDSC] = &mmagic_video_gdsc, 3508 [MMAGIC_MDSS_GDSC] = &mmagic_mdss_gdsc, 3509 [MMAGIC_CAMSS_GDSC] = &mmagic_camss_gdsc, 3510 [VENUS_GDSC] = &venus_gdsc, 3511 [VENUS_CORE0_GDSC] = &venus_core0_gdsc, 3512 [VENUS_CORE1_GDSC] = &venus_core1_gdsc, 3513 [CAMSS_GDSC] = &camss_gdsc, 3514 [VFE0_GDSC] = &vfe0_gdsc, 3515 [VFE1_GDSC] = &vfe1_gdsc, 3516 [JPEG_GDSC] = &jpeg_gdsc, 3517 [CPP_GDSC] = &cpp_gdsc, 3518 [FD_GDSC] = &fd_gdsc, 3519 [MDSS_GDSC] = &mdss_gdsc, 3520 [GPU_GDSC] = &gpu_gdsc, 3521 [GPU_GX_GDSC] = &gpu_gx_gdsc, 3522 }; 3523 3524 static const struct qcom_reset_map mmcc_msm8996_resets[] = { 3525 [MMAGICAHB_BCR] = { 0x5020 }, 3526 [MMAGIC_CFG_BCR] = { 0x5050 }, 3527 [MISC_BCR] = { 0x5010 }, 3528 [BTO_BCR] = { 0x5030 }, 3529 [MMAGICAXI_BCR] = { 0x5060 }, 3530 [MMAGICMAXI_BCR] = { 0x5070 }, 3531 [DSA_BCR] = { 0x50a0 }, 3532 [MMAGIC_CAMSS_BCR] = { 0x3c40 }, 3533 [THROTTLE_CAMSS_BCR] = { 0x3c30 }, 3534 [SMMU_VFE_BCR] = { 0x3c00 }, 3535 [SMMU_CPP_BCR] = { 0x3c10 }, 3536 [SMMU_JPEG_BCR] = { 0x3c20 }, 3537 [MMAGIC_MDSS_BCR] = { 0x2470 }, 3538 [THROTTLE_MDSS_BCR] = { 0x2460 }, 3539 [SMMU_ROT_BCR] = { 0x2440 }, 3540 [SMMU_MDP_BCR] = { 0x2450 }, 3541 [MMAGIC_VIDEO_BCR] = { 0x1190 }, 3542 [THROTTLE_VIDEO_BCR] = { 0x1180 }, 3543 [SMMU_VIDEO_BCR] = { 0x1170 }, 3544 [MMAGIC_BIMC_BCR] = { 0x5290 }, 3545 [GPU_GX_BCR] = { 0x4020 }, 3546 [GPU_BCR] = { 0x4030 }, 3547 [GPU_AON_BCR] = { 0x4040 }, 3548 [VMEM_BCR] = { 0x1200 }, 3549 [MMSS_RBCPR_BCR] = { 0x4080 }, 3550 [VIDEO_BCR] = { 0x1020 }, 3551 [MDSS_BCR] = { 0x2300 }, 3552 [CAMSS_TOP_BCR] = { 0x3480 }, 3553 [CAMSS_AHB_BCR] = { 0x3488 }, 3554 [CAMSS_MICRO_BCR] = { 0x3490 }, 3555 [CAMSS_CCI_BCR] = { 0x3340 }, 3556 [CAMSS_PHY0_BCR] = { 0x3020 }, 3557 [CAMSS_PHY1_BCR] = { 0x3050 }, 3558 [CAMSS_PHY2_BCR] = { 0x3080 }, 3559 [CAMSS_CSIPHY0_3P_BCR] = { 0x3230 }, 3560 [CAMSS_CSIPHY1_3P_BCR] = { 0x3250 }, 3561 [CAMSS_CSIPHY2_3P_BCR] = { 0x3270 }, 3562 [CAMSS_JPEG_BCR] = { 0x35a0 }, 3563 [CAMSS_VFE_BCR] = { 0x36a0 }, 3564 [CAMSS_VFE0_BCR] = { 0x3660 }, 3565 [CAMSS_VFE1_BCR] = { 0x3670 }, 3566 [CAMSS_CSI_VFE0_BCR] = { 0x3700 }, 3567 [CAMSS_CSI_VFE1_BCR] = { 0x3710 }, 3568 [CAMSS_CPP_TOP_BCR] = { 0x36c0 }, 3569 [CAMSS_CPP_BCR] = { 0x36d0 }, 3570 [CAMSS_CSI0_BCR] = { 0x30b0 }, 3571 [CAMSS_CSI0RDI_BCR] = { 0x30d0 }, 3572 [CAMSS_CSI0PIX_BCR] = { 0x30e0 }, 3573 [CAMSS_CSI1_BCR] = { 0x3120 }, 3574 [CAMSS_CSI1RDI_BCR] = { 0x3140 }, 3575 [CAMSS_CSI1PIX_BCR] = { 0x3150 }, 3576 [CAMSS_CSI2_BCR] = { 0x3180 }, 3577 [CAMSS_CSI2RDI_BCR] = { 0x31a0 }, 3578 [CAMSS_CSI2PIX_BCR] = { 0x31b0 }, 3579 [CAMSS_CSI3_BCR] = { 0x31e0 }, 3580 [CAMSS_CSI3RDI_BCR] = { 0x3200 }, 3581 [CAMSS_CSI3PIX_BCR] = { 0x3210 }, 3582 [CAMSS_ISPIF_BCR] = { 0x3220 }, 3583 [FD_BCR] = { 0x3b60 }, 3584 [MMSS_SPDM_RM_BCR] = { 0x300 }, 3585 }; 3586 3587 static const struct regmap_config mmcc_msm8996_regmap_config = { 3588 .reg_bits = 32, 3589 .reg_stride = 4, 3590 .val_bits = 32, 3591 .max_register = 0xb008, 3592 .fast_io = true, 3593 }; 3594 3595 static const struct qcom_cc_desc mmcc_msm8996_desc = { 3596 .config = &mmcc_msm8996_regmap_config, 3597 .clks = mmcc_msm8996_clocks, 3598 .num_clks = ARRAY_SIZE(mmcc_msm8996_clocks), 3599 .resets = mmcc_msm8996_resets, 3600 .num_resets = ARRAY_SIZE(mmcc_msm8996_resets), 3601 .gdscs = mmcc_msm8996_gdscs, 3602 .num_gdscs = ARRAY_SIZE(mmcc_msm8996_gdscs), 3603 .clk_hws = mmcc_msm8996_hws, 3604 .num_clk_hws = ARRAY_SIZE(mmcc_msm8996_hws), 3605 }; 3606 3607 static const struct of_device_id mmcc_msm8996_match_table[] = { 3608 { .compatible = "qcom,mmcc-msm8996" }, 3609 { } 3610 }; 3611 MODULE_DEVICE_TABLE(of, mmcc_msm8996_match_table); 3612 3613 static int mmcc_msm8996_probe(struct platform_device *pdev) 3614 { 3615 struct regmap *regmap; 3616 3617 regmap = qcom_cc_map(pdev, &mmcc_msm8996_desc); 3618 if (IS_ERR(regmap)) 3619 return PTR_ERR(regmap); 3620 3621 /* Disable the AHB DCD */ 3622 regmap_update_bits(regmap, 0x50d8, BIT(31), 0); 3623 /* Disable the NoC FSM for mmss_mmagic_cfg_ahb_clk */ 3624 regmap_update_bits(regmap, 0x5054, BIT(15), 0); 3625 3626 return qcom_cc_really_probe(&pdev->dev, &mmcc_msm8996_desc, regmap); 3627 } 3628 3629 static struct platform_driver mmcc_msm8996_driver = { 3630 .probe = mmcc_msm8996_probe, 3631 .driver = { 3632 .name = "mmcc-msm8996", 3633 .of_match_table = mmcc_msm8996_match_table, 3634 }, 3635 }; 3636 module_platform_driver(mmcc_msm8996_driver); 3637 3638 MODULE_DESCRIPTION("QCOM MMCC MSM8996 Driver"); 3639 MODULE_LICENSE("GPL v2"); 3640 MODULE_ALIAS("platform:mmcc-msm8996"); 3641