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