1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Copyright (c) 2019, The Linux Foundation. All rights reserved. 4 */ 5 6 #include <linux/kernel.h> 7 #include <linux/bitops.h> 8 #include <linux/err.h> 9 #include <linux/platform_device.h> 10 #include <linux/module.h> 11 #include <linux/clk-provider.h> 12 #include <linux/regmap.h> 13 14 #include <dt-bindings/clock/qcom,mmcc-msm8998.h> 15 16 #include "common.h" 17 #include "clk-regmap.h" 18 #include "clk-regmap-divider.h" 19 #include "clk-alpha-pll.h" 20 #include "clk-rcg.h" 21 #include "clk-branch.h" 22 #include "reset.h" 23 #include "gdsc.h" 24 25 enum { 26 P_XO, 27 P_GPLL0, 28 P_GPLL0_DIV, 29 P_MMPLL0_OUT_EVEN, 30 P_MMPLL1_OUT_EVEN, 31 P_MMPLL3_OUT_EVEN, 32 P_MMPLL4_OUT_EVEN, 33 P_MMPLL5_OUT_EVEN, 34 P_MMPLL6_OUT_EVEN, 35 P_MMPLL7_OUT_EVEN, 36 P_MMPLL10_OUT_EVEN, 37 P_DSI0PLL, 38 P_DSI1PLL, 39 P_DSI0PLL_BYTE, 40 P_DSI1PLL_BYTE, 41 P_HDMIPLL, 42 P_DPVCO, 43 P_DPLINK, 44 }; 45 46 static const struct clk_div_table post_div_table_fabia_even[] = { 47 { 0x0, 1 }, 48 { 0x1, 2 }, 49 { 0x3, 4 }, 50 { 0x7, 8 }, 51 { } 52 }; 53 54 static struct clk_alpha_pll mmpll0 = { 55 .offset = 0xc000, 56 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 57 .clkr = { 58 .enable_reg = 0x1e0, 59 .enable_mask = BIT(0), 60 .hw.init = &(struct clk_init_data){ 61 .name = "mmpll0", 62 .parent_data = &(const struct clk_parent_data){ 63 .fw_name = "xo" 64 }, 65 .num_parents = 1, 66 .ops = &clk_alpha_pll_fixed_fabia_ops, 67 }, 68 }, 69 }; 70 71 static struct clk_alpha_pll_postdiv mmpll0_out_even = { 72 .offset = 0xc000, 73 .post_div_shift = 8, 74 .post_div_table = post_div_table_fabia_even, 75 .num_post_div = ARRAY_SIZE(post_div_table_fabia_even), 76 .width = 4, 77 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 78 .clkr.hw.init = &(struct clk_init_data){ 79 .name = "mmpll0_out_even", 80 .parent_hws = (const struct clk_hw *[]){ &mmpll0.clkr.hw }, 81 .num_parents = 1, 82 .ops = &clk_alpha_pll_postdiv_fabia_ops, 83 }, 84 }; 85 86 static struct clk_alpha_pll mmpll1 = { 87 .offset = 0xc050, 88 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 89 .clkr = { 90 .enable_reg = 0x1e0, 91 .enable_mask = BIT(1), 92 .hw.init = &(struct clk_init_data){ 93 .name = "mmpll1", 94 .parent_data = &(const struct clk_parent_data){ 95 .fw_name = "xo" 96 }, 97 .num_parents = 1, 98 .ops = &clk_alpha_pll_fixed_fabia_ops, 99 }, 100 }, 101 }; 102 103 static struct clk_alpha_pll_postdiv mmpll1_out_even = { 104 .offset = 0xc050, 105 .post_div_shift = 8, 106 .post_div_table = post_div_table_fabia_even, 107 .num_post_div = ARRAY_SIZE(post_div_table_fabia_even), 108 .width = 4, 109 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 110 .clkr.hw.init = &(struct clk_init_data){ 111 .name = "mmpll1_out_even", 112 .parent_hws = (const struct clk_hw *[]){ &mmpll1.clkr.hw }, 113 .num_parents = 1, 114 .ops = &clk_alpha_pll_postdiv_fabia_ops, 115 }, 116 }; 117 118 static struct clk_alpha_pll mmpll3 = { 119 .offset = 0x0, 120 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 121 .clkr.hw.init = &(struct clk_init_data){ 122 .name = "mmpll3", 123 .parent_data = &(const struct clk_parent_data){ 124 .fw_name = "xo" 125 }, 126 .num_parents = 1, 127 .ops = &clk_alpha_pll_fixed_fabia_ops, 128 }, 129 }; 130 131 static struct clk_alpha_pll_postdiv mmpll3_out_even = { 132 .offset = 0x0, 133 .post_div_shift = 8, 134 .post_div_table = post_div_table_fabia_even, 135 .num_post_div = ARRAY_SIZE(post_div_table_fabia_even), 136 .width = 4, 137 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 138 .clkr.hw.init = &(struct clk_init_data){ 139 .name = "mmpll3_out_even", 140 .parent_hws = (const struct clk_hw *[]){ &mmpll3.clkr.hw }, 141 .num_parents = 1, 142 .ops = &clk_alpha_pll_postdiv_fabia_ops, 143 }, 144 }; 145 146 static struct clk_alpha_pll mmpll4 = { 147 .offset = 0x50, 148 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 149 .clkr.hw.init = &(struct clk_init_data){ 150 .name = "mmpll4", 151 .parent_data = &(const struct clk_parent_data){ 152 .fw_name = "xo" 153 }, 154 .num_parents = 1, 155 .ops = &clk_alpha_pll_fixed_fabia_ops, 156 }, 157 }; 158 159 static struct clk_alpha_pll_postdiv mmpll4_out_even = { 160 .offset = 0x50, 161 .post_div_shift = 8, 162 .post_div_table = post_div_table_fabia_even, 163 .num_post_div = ARRAY_SIZE(post_div_table_fabia_even), 164 .width = 4, 165 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 166 .clkr.hw.init = &(struct clk_init_data){ 167 .name = "mmpll4_out_even", 168 .parent_hws = (const struct clk_hw *[]){ &mmpll4.clkr.hw }, 169 .num_parents = 1, 170 .ops = &clk_alpha_pll_postdiv_fabia_ops, 171 }, 172 }; 173 174 static struct clk_alpha_pll mmpll5 = { 175 .offset = 0xa0, 176 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 177 .clkr.hw.init = &(struct clk_init_data){ 178 .name = "mmpll5", 179 .parent_data = &(const struct clk_parent_data){ 180 .fw_name = "xo" 181 }, 182 .num_parents = 1, 183 .ops = &clk_alpha_pll_fixed_fabia_ops, 184 }, 185 }; 186 187 static struct clk_alpha_pll_postdiv mmpll5_out_even = { 188 .offset = 0xa0, 189 .post_div_shift = 8, 190 .post_div_table = post_div_table_fabia_even, 191 .num_post_div = ARRAY_SIZE(post_div_table_fabia_even), 192 .width = 4, 193 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 194 .clkr.hw.init = &(struct clk_init_data){ 195 .name = "mmpll5_out_even", 196 .parent_hws = (const struct clk_hw *[]){ &mmpll5.clkr.hw }, 197 .num_parents = 1, 198 .ops = &clk_alpha_pll_postdiv_fabia_ops, 199 }, 200 }; 201 202 static struct clk_alpha_pll mmpll6 = { 203 .offset = 0xf0, 204 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 205 .clkr.hw.init = &(struct clk_init_data){ 206 .name = "mmpll6", 207 .parent_data = &(const struct clk_parent_data){ 208 .fw_name = "xo" 209 }, 210 .num_parents = 1, 211 .ops = &clk_alpha_pll_fixed_fabia_ops, 212 }, 213 }; 214 215 static struct clk_alpha_pll_postdiv mmpll6_out_even = { 216 .offset = 0xf0, 217 .post_div_shift = 8, 218 .post_div_table = post_div_table_fabia_even, 219 .num_post_div = ARRAY_SIZE(post_div_table_fabia_even), 220 .width = 4, 221 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 222 .clkr.hw.init = &(struct clk_init_data){ 223 .name = "mmpll6_out_even", 224 .parent_hws = (const struct clk_hw *[]){ &mmpll6.clkr.hw }, 225 .num_parents = 1, 226 .ops = &clk_alpha_pll_postdiv_fabia_ops, 227 }, 228 }; 229 230 static struct clk_alpha_pll mmpll7 = { 231 .offset = 0x140, 232 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 233 .clkr.hw.init = &(struct clk_init_data){ 234 .name = "mmpll7", 235 .parent_data = &(const struct clk_parent_data){ 236 .fw_name = "xo" 237 }, 238 .num_parents = 1, 239 .ops = &clk_alpha_pll_fixed_fabia_ops, 240 }, 241 }; 242 243 static struct clk_alpha_pll_postdiv mmpll7_out_even = { 244 .offset = 0x140, 245 .post_div_shift = 8, 246 .post_div_table = post_div_table_fabia_even, 247 .num_post_div = ARRAY_SIZE(post_div_table_fabia_even), 248 .width = 4, 249 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 250 .clkr.hw.init = &(struct clk_init_data){ 251 .name = "mmpll7_out_even", 252 .parent_hws = (const struct clk_hw *[]){ &mmpll7.clkr.hw }, 253 .num_parents = 1, 254 .ops = &clk_alpha_pll_postdiv_fabia_ops, 255 }, 256 }; 257 258 static struct clk_alpha_pll mmpll10 = { 259 .offset = 0x190, 260 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 261 .clkr.hw.init = &(struct clk_init_data){ 262 .name = "mmpll10", 263 .parent_data = &(const struct clk_parent_data){ 264 .fw_name = "xo" 265 }, 266 .num_parents = 1, 267 .ops = &clk_alpha_pll_fixed_fabia_ops, 268 }, 269 }; 270 271 static struct clk_alpha_pll_postdiv mmpll10_out_even = { 272 .offset = 0x190, 273 .post_div_shift = 8, 274 .post_div_table = post_div_table_fabia_even, 275 .num_post_div = ARRAY_SIZE(post_div_table_fabia_even), 276 .width = 4, 277 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA], 278 .clkr.hw.init = &(struct clk_init_data){ 279 .name = "mmpll10_out_even", 280 .parent_hws = (const struct clk_hw *[]){ &mmpll10.clkr.hw }, 281 .num_parents = 1, 282 .ops = &clk_alpha_pll_postdiv_fabia_ops, 283 }, 284 }; 285 286 static const struct parent_map mmss_xo_hdmi_map[] = { 287 { P_XO, 0 }, 288 { P_HDMIPLL, 1 }, 289 }; 290 291 static const struct clk_parent_data mmss_xo_hdmi[] = { 292 { .fw_name = "xo" }, 293 { .fw_name = "hdmipll" }, 294 }; 295 296 static const struct parent_map mmss_xo_dsi0pll_dsi1pll_map[] = { 297 { P_XO, 0 }, 298 { P_DSI0PLL, 1 }, 299 { P_DSI1PLL, 2 }, 300 }; 301 302 static const struct clk_parent_data mmss_xo_dsi0pll_dsi1pll[] = { 303 { .fw_name = "xo" }, 304 { .fw_name = "dsi0dsi" }, 305 { .fw_name = "dsi1dsi" }, 306 }; 307 308 static const struct parent_map mmss_xo_dsibyte_map[] = { 309 { P_XO, 0 }, 310 { P_DSI0PLL_BYTE, 1 }, 311 { P_DSI1PLL_BYTE, 2 }, 312 }; 313 314 static const struct clk_parent_data mmss_xo_dsibyte[] = { 315 { .fw_name = "xo" }, 316 { .fw_name = "dsi0byte" }, 317 { .fw_name = "dsi1byte" }, 318 }; 319 320 static const struct parent_map mmss_xo_dp_map[] = { 321 { P_XO, 0 }, 322 { P_DPLINK, 1 }, 323 { P_DPVCO, 2 }, 324 }; 325 326 static const struct clk_parent_data mmss_xo_dp[] = { 327 { .fw_name = "xo" }, 328 { .fw_name = "dplink" }, 329 { .fw_name = "dpvco" }, 330 }; 331 332 static const struct parent_map mmss_xo_gpll0_gpll0_div_map[] = { 333 { P_XO, 0 }, 334 { P_GPLL0, 5 }, 335 { P_GPLL0_DIV, 6 }, 336 }; 337 338 static const struct clk_parent_data mmss_xo_gpll0_gpll0_div[] = { 339 { .fw_name = "xo" }, 340 { .fw_name = "gpll0" }, 341 { .fw_name = "gpll0_div", .name = "gcc_mmss_gpll0_div_clk" }, 342 }; 343 344 static const struct parent_map mmss_xo_mmpll0_gpll0_gpll0_div_map[] = { 345 { P_XO, 0 }, 346 { P_MMPLL0_OUT_EVEN, 1 }, 347 { P_GPLL0, 5 }, 348 { P_GPLL0_DIV, 6 }, 349 }; 350 351 static const struct clk_parent_data mmss_xo_mmpll0_gpll0_gpll0_div[] = { 352 { .fw_name = "xo" }, 353 { .hw = &mmpll0_out_even.clkr.hw }, 354 { .fw_name = "gpll0" }, 355 { .fw_name = "gpll0_div", .name = "gcc_mmss_gpll0_div_clk" }, 356 }; 357 358 static const struct parent_map mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div_map[] = { 359 { P_XO, 0 }, 360 { P_MMPLL0_OUT_EVEN, 1 }, 361 { P_MMPLL1_OUT_EVEN, 2 }, 362 { P_GPLL0, 5 }, 363 { P_GPLL0_DIV, 6 }, 364 }; 365 366 static const struct clk_parent_data mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div[] = { 367 { .fw_name = "xo" }, 368 { .hw = &mmpll0_out_even.clkr.hw }, 369 { .hw = &mmpll1_out_even.clkr.hw }, 370 { .fw_name = "gpll0" }, 371 { .fw_name = "gpll0_div", .name = "gcc_mmss_gpll0_div_clk" }, 372 }; 373 374 static const struct parent_map mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div_map[] = { 375 { P_XO, 0 }, 376 { P_MMPLL0_OUT_EVEN, 1 }, 377 { P_MMPLL5_OUT_EVEN, 2 }, 378 { P_GPLL0, 5 }, 379 { P_GPLL0_DIV, 6 }, 380 }; 381 382 static const struct clk_parent_data mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div[] = { 383 { .fw_name = "xo" }, 384 { .hw = &mmpll0_out_even.clkr.hw }, 385 { .hw = &mmpll5_out_even.clkr.hw }, 386 { .fw_name = "gpll0" }, 387 { .fw_name = "gpll0_div", .name = "gcc_mmss_gpll0_div_clk" }, 388 }; 389 390 static const struct parent_map mmss_xo_mmpll0_mmpll3_mmpll6_gpll0_gpll0_div_map[] = { 391 { P_XO, 0 }, 392 { P_MMPLL0_OUT_EVEN, 1 }, 393 { P_MMPLL3_OUT_EVEN, 3 }, 394 { P_MMPLL6_OUT_EVEN, 4 }, 395 { P_GPLL0, 5 }, 396 { P_GPLL0_DIV, 6 }, 397 }; 398 399 static const struct clk_parent_data mmss_xo_mmpll0_mmpll3_mmpll6_gpll0_gpll0_div[] = { 400 { .fw_name = "xo" }, 401 { .hw = &mmpll0_out_even.clkr.hw }, 402 { .hw = &mmpll3_out_even.clkr.hw }, 403 { .hw = &mmpll6_out_even.clkr.hw }, 404 { .fw_name = "gpll0" }, 405 { .fw_name = "gpll0_div", .name = "gcc_mmss_gpll0_div_clk" }, 406 }; 407 408 static const struct parent_map mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map[] = { 409 { P_XO, 0 }, 410 { P_MMPLL4_OUT_EVEN, 1 }, 411 { P_MMPLL7_OUT_EVEN, 2 }, 412 { P_MMPLL10_OUT_EVEN, 3 }, 413 { P_GPLL0, 5 }, 414 { P_GPLL0_DIV, 6 }, 415 }; 416 417 static const struct clk_parent_data mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div[] = { 418 { .fw_name = "xo" }, 419 { .hw = &mmpll4_out_even.clkr.hw }, 420 { .hw = &mmpll7_out_even.clkr.hw }, 421 { .hw = &mmpll10_out_even.clkr.hw }, 422 { .fw_name = "gpll0" }, 423 { .fw_name = "gpll0_div", .name = "gcc_mmss_gpll0_div_clk" }, 424 }; 425 426 static const struct parent_map mmss_xo_mmpll0_mmpll7_mmpll10_gpll0_gpll0_div_map[] = { 427 { P_XO, 0 }, 428 { P_MMPLL0_OUT_EVEN, 1 }, 429 { P_MMPLL7_OUT_EVEN, 2 }, 430 { P_MMPLL10_OUT_EVEN, 3 }, 431 { P_GPLL0, 5 }, 432 { P_GPLL0_DIV, 6 }, 433 }; 434 435 static const struct clk_parent_data mmss_xo_mmpll0_mmpll7_mmpll10_gpll0_gpll0_div[] = { 436 { .fw_name = "xo" }, 437 { .hw = &mmpll0_out_even.clkr.hw }, 438 { .hw = &mmpll7_out_even.clkr.hw }, 439 { .hw = &mmpll10_out_even.clkr.hw }, 440 { .fw_name = "gpll0" }, 441 { .fw_name = "gpll0_div", .name = "gcc_mmss_gpll0_div_clk" }, 442 }; 443 444 static const struct parent_map mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map[] = { 445 { P_XO, 0 }, 446 { P_MMPLL0_OUT_EVEN, 1 }, 447 { P_MMPLL4_OUT_EVEN, 2 }, 448 { P_MMPLL7_OUT_EVEN, 3 }, 449 { P_MMPLL10_OUT_EVEN, 4 }, 450 { P_GPLL0, 5 }, 451 { P_GPLL0_DIV, 6 }, 452 }; 453 454 static const struct clk_parent_data mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div[] = { 455 { .fw_name = "xo" }, 456 { .hw = &mmpll0_out_even.clkr.hw }, 457 { .hw = &mmpll4_out_even.clkr.hw }, 458 { .hw = &mmpll7_out_even.clkr.hw }, 459 { .hw = &mmpll10_out_even.clkr.hw }, 460 { .fw_name = "gpll0" }, 461 { .fw_name = "gpll0_div", .name = "gcc_mmss_gpll0_div_clk" }, 462 }; 463 464 static struct clk_rcg2 byte0_clk_src = { 465 .cmd_rcgr = 0x2120, 466 .hid_width = 5, 467 .parent_map = mmss_xo_dsibyte_map, 468 .clkr.hw.init = &(struct clk_init_data){ 469 .name = "byte0_clk_src", 470 .parent_data = mmss_xo_dsibyte, 471 .num_parents = ARRAY_SIZE(mmss_xo_dsibyte), 472 .ops = &clk_byte2_ops, 473 .flags = CLK_SET_RATE_PARENT, 474 }, 475 }; 476 477 static struct clk_rcg2 byte1_clk_src = { 478 .cmd_rcgr = 0x2140, 479 .hid_width = 5, 480 .parent_map = mmss_xo_dsibyte_map, 481 .clkr.hw.init = &(struct clk_init_data){ 482 .name = "byte1_clk_src", 483 .parent_data = mmss_xo_dsibyte, 484 .num_parents = ARRAY_SIZE(mmss_xo_dsibyte), 485 .ops = &clk_byte2_ops, 486 .flags = CLK_SET_RATE_PARENT, 487 }, 488 }; 489 490 static const struct freq_tbl ftbl_cci_clk_src[] = { 491 F(37500000, P_GPLL0, 16, 0, 0), 492 F(50000000, P_GPLL0, 12, 0, 0), 493 F(100000000, P_GPLL0, 6, 0, 0), 494 { } 495 }; 496 497 static struct clk_rcg2 cci_clk_src = { 498 .cmd_rcgr = 0x3300, 499 .hid_width = 5, 500 .parent_map = mmss_xo_mmpll0_mmpll7_mmpll10_gpll0_gpll0_div_map, 501 .freq_tbl = ftbl_cci_clk_src, 502 .clkr.hw.init = &(struct clk_init_data){ 503 .name = "cci_clk_src", 504 .parent_data = mmss_xo_mmpll0_mmpll7_mmpll10_gpll0_gpll0_div, 505 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll7_mmpll10_gpll0_gpll0_div), 506 .ops = &clk_rcg2_ops, 507 }, 508 }; 509 510 static const struct freq_tbl ftbl_cpp_clk_src[] = { 511 F(100000000, P_GPLL0, 6, 0, 0), 512 F(200000000, P_GPLL0, 3, 0, 0), 513 F(384000000, P_MMPLL4_OUT_EVEN, 2, 0, 0), 514 F(404000000, P_MMPLL0_OUT_EVEN, 2, 0, 0), 515 F(480000000, P_MMPLL7_OUT_EVEN, 2, 0, 0), 516 F(576000000, P_MMPLL10_OUT_EVEN, 1, 0, 0), 517 F(600000000, P_GPLL0, 1, 0, 0), 518 { } 519 }; 520 521 static struct clk_rcg2 cpp_clk_src = { 522 .cmd_rcgr = 0x3640, 523 .hid_width = 5, 524 .parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map, 525 .freq_tbl = ftbl_cpp_clk_src, 526 .clkr.hw.init = &(struct clk_init_data){ 527 .name = "cpp_clk_src", 528 .parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div, 529 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div), 530 .ops = &clk_rcg2_ops, 531 }, 532 }; 533 534 static const struct freq_tbl ftbl_csi_clk_src[] = { 535 F(164571429, P_MMPLL10_OUT_EVEN, 3.5, 0, 0), 536 F(256000000, P_MMPLL4_OUT_EVEN, 3, 0, 0), 537 F(274290000, P_MMPLL7_OUT_EVEN, 3.5, 0, 0), 538 F(300000000, P_GPLL0, 2, 0, 0), 539 F(384000000, P_MMPLL4_OUT_EVEN, 2, 0, 0), 540 F(576000000, P_MMPLL10_OUT_EVEN, 1, 0, 0), 541 { } 542 }; 543 544 static struct clk_rcg2 csi0_clk_src = { 545 .cmd_rcgr = 0x3090, 546 .hid_width = 5, 547 .parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map, 548 .freq_tbl = ftbl_csi_clk_src, 549 .clkr.hw.init = &(struct clk_init_data){ 550 .name = "csi0_clk_src", 551 .parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div, 552 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div), 553 .ops = &clk_rcg2_ops, 554 }, 555 }; 556 557 static struct clk_rcg2 csi1_clk_src = { 558 .cmd_rcgr = 0x3100, 559 .hid_width = 5, 560 .parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map, 561 .freq_tbl = ftbl_csi_clk_src, 562 .clkr.hw.init = &(struct clk_init_data){ 563 .name = "csi1_clk_src", 564 .parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div, 565 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div), 566 .ops = &clk_rcg2_ops, 567 }, 568 }; 569 570 static struct clk_rcg2 csi2_clk_src = { 571 .cmd_rcgr = 0x3160, 572 .hid_width = 5, 573 .parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map, 574 .freq_tbl = ftbl_csi_clk_src, 575 .clkr.hw.init = &(struct clk_init_data){ 576 .name = "csi2_clk_src", 577 .parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div, 578 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div), 579 .ops = &clk_rcg2_ops, 580 }, 581 }; 582 583 static struct clk_rcg2 csi3_clk_src = { 584 .cmd_rcgr = 0x31c0, 585 .hid_width = 5, 586 .parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map, 587 .freq_tbl = ftbl_csi_clk_src, 588 .clkr.hw.init = &(struct clk_init_data){ 589 .name = "csi3_clk_src", 590 .parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div, 591 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div), 592 .ops = &clk_rcg2_ops, 593 }, 594 }; 595 596 static const struct freq_tbl ftbl_csiphy_clk_src[] = { 597 F(164571429, P_MMPLL10_OUT_EVEN, 3.5, 0, 0), 598 F(256000000, P_MMPLL4_OUT_EVEN, 3, 0, 0), 599 F(274290000, P_MMPLL7_OUT_EVEN, 3.5, 0, 0), 600 F(300000000, P_GPLL0, 2, 0, 0), 601 F(384000000, P_MMPLL4_OUT_EVEN, 2, 0, 0), 602 { } 603 }; 604 605 static struct clk_rcg2 csiphy_clk_src = { 606 .cmd_rcgr = 0x3800, 607 .hid_width = 5, 608 .parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map, 609 .freq_tbl = ftbl_csiphy_clk_src, 610 .clkr.hw.init = &(struct clk_init_data){ 611 .name = "csiphy_clk_src", 612 .parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div, 613 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div), 614 .ops = &clk_rcg2_ops, 615 }, 616 }; 617 618 static const struct freq_tbl ftbl_csiphytimer_clk_src[] = { 619 F(200000000, P_GPLL0, 3, 0, 0), 620 F(269333333, P_MMPLL0_OUT_EVEN, 3, 0, 0), 621 { } 622 }; 623 624 static struct clk_rcg2 csi0phytimer_clk_src = { 625 .cmd_rcgr = 0x3000, 626 .hid_width = 5, 627 .parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map, 628 .freq_tbl = ftbl_csiphytimer_clk_src, 629 .clkr.hw.init = &(struct clk_init_data){ 630 .name = "csi0phytimer_clk_src", 631 .parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div, 632 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div), 633 .ops = &clk_rcg2_ops, 634 }, 635 }; 636 637 static struct clk_rcg2 csi1phytimer_clk_src = { 638 .cmd_rcgr = 0x3030, 639 .hid_width = 5, 640 .parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map, 641 .freq_tbl = ftbl_csiphytimer_clk_src, 642 .clkr.hw.init = &(struct clk_init_data){ 643 .name = "csi1phytimer_clk_src", 644 .parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div, 645 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div), 646 .ops = &clk_rcg2_ops, 647 }, 648 }; 649 650 static struct clk_rcg2 csi2phytimer_clk_src = { 651 .cmd_rcgr = 0x3060, 652 .hid_width = 5, 653 .parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map, 654 .freq_tbl = ftbl_csiphytimer_clk_src, 655 .clkr.hw.init = &(struct clk_init_data){ 656 .name = "csi2phytimer_clk_src", 657 .parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div, 658 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div), 659 .ops = &clk_rcg2_ops, 660 }, 661 }; 662 663 static const struct freq_tbl ftbl_dp_aux_clk_src[] = { 664 F(19200000, P_XO, 1, 0, 0), 665 { } 666 }; 667 668 static struct clk_rcg2 dp_aux_clk_src = { 669 .cmd_rcgr = 0x2260, 670 .hid_width = 5, 671 .parent_map = mmss_xo_gpll0_gpll0_div_map, 672 .freq_tbl = ftbl_dp_aux_clk_src, 673 .clkr.hw.init = &(struct clk_init_data){ 674 .name = "dp_aux_clk_src", 675 .parent_data = mmss_xo_gpll0_gpll0_div, 676 .num_parents = ARRAY_SIZE(mmss_xo_gpll0_gpll0_div), 677 .ops = &clk_rcg2_ops, 678 }, 679 }; 680 681 static const struct freq_tbl ftbl_dp_crypto_clk_src[] = { 682 F(101250, P_DPLINK, 1, 5, 16), 683 F(168750, P_DPLINK, 1, 5, 16), 684 F(337500, P_DPLINK, 1, 5, 16), 685 { } 686 }; 687 688 static struct clk_rcg2 dp_crypto_clk_src = { 689 .cmd_rcgr = 0x2220, 690 .hid_width = 5, 691 .parent_map = mmss_xo_dp_map, 692 .freq_tbl = ftbl_dp_crypto_clk_src, 693 .clkr.hw.init = &(struct clk_init_data){ 694 .name = "dp_crypto_clk_src", 695 .parent_data = mmss_xo_dp, 696 .num_parents = ARRAY_SIZE(mmss_xo_dp), 697 .ops = &clk_rcg2_ops, 698 }, 699 }; 700 701 static const struct freq_tbl ftbl_dp_link_clk_src[] = { 702 F(162000, P_DPLINK, 2, 0, 0), 703 F(270000, P_DPLINK, 2, 0, 0), 704 F(540000, P_DPLINK, 2, 0, 0), 705 { } 706 }; 707 708 static struct clk_rcg2 dp_link_clk_src = { 709 .cmd_rcgr = 0x2200, 710 .hid_width = 5, 711 .parent_map = mmss_xo_dp_map, 712 .freq_tbl = ftbl_dp_link_clk_src, 713 .clkr.hw.init = &(struct clk_init_data){ 714 .name = "dp_link_clk_src", 715 .parent_data = mmss_xo_dp, 716 .num_parents = ARRAY_SIZE(mmss_xo_dp), 717 .ops = &clk_rcg2_ops, 718 }, 719 }; 720 721 static const struct freq_tbl ftbl_dp_pixel_clk_src[] = { 722 F(154000000, P_DPVCO, 1, 0, 0), 723 F(337500000, P_DPVCO, 2, 0, 0), 724 F(675000000, P_DPVCO, 2, 0, 0), 725 { } 726 }; 727 728 static struct clk_rcg2 dp_pixel_clk_src = { 729 .cmd_rcgr = 0x2240, 730 .hid_width = 5, 731 .parent_map = mmss_xo_dp_map, 732 .freq_tbl = ftbl_dp_pixel_clk_src, 733 .clkr.hw.init = &(struct clk_init_data){ 734 .name = "dp_pixel_clk_src", 735 .parent_data = mmss_xo_dp, 736 .num_parents = ARRAY_SIZE(mmss_xo_dp), 737 .ops = &clk_rcg2_ops, 738 }, 739 }; 740 741 static const struct freq_tbl ftbl_esc_clk_src[] = { 742 F(19200000, P_XO, 1, 0, 0), 743 { } 744 }; 745 746 static struct clk_rcg2 esc0_clk_src = { 747 .cmd_rcgr = 0x2160, 748 .hid_width = 5, 749 .parent_map = mmss_xo_dsibyte_map, 750 .freq_tbl = ftbl_esc_clk_src, 751 .clkr.hw.init = &(struct clk_init_data){ 752 .name = "esc0_clk_src", 753 .parent_data = mmss_xo_dsibyte, 754 .num_parents = ARRAY_SIZE(mmss_xo_dsibyte), 755 .ops = &clk_rcg2_ops, 756 }, 757 }; 758 759 static struct clk_rcg2 esc1_clk_src = { 760 .cmd_rcgr = 0x2180, 761 .hid_width = 5, 762 .parent_map = mmss_xo_dsibyte_map, 763 .freq_tbl = ftbl_esc_clk_src, 764 .clkr.hw.init = &(struct clk_init_data){ 765 .name = "esc1_clk_src", 766 .parent_data = mmss_xo_dsibyte, 767 .num_parents = ARRAY_SIZE(mmss_xo_dsibyte), 768 .ops = &clk_rcg2_ops, 769 }, 770 }; 771 772 static const struct freq_tbl ftbl_extpclk_clk_src[] = { 773 { .src = P_HDMIPLL }, 774 { } 775 }; 776 777 static struct clk_rcg2 extpclk_clk_src = { 778 .cmd_rcgr = 0x2060, 779 .hid_width = 5, 780 .parent_map = mmss_xo_hdmi_map, 781 .freq_tbl = ftbl_extpclk_clk_src, 782 .clkr.hw.init = &(struct clk_init_data){ 783 .name = "extpclk_clk_src", 784 .parent_data = mmss_xo_hdmi, 785 .num_parents = ARRAY_SIZE(mmss_xo_hdmi), 786 .ops = &clk_byte_ops, 787 .flags = CLK_SET_RATE_PARENT, 788 }, 789 }; 790 791 static const struct freq_tbl ftbl_fd_core_clk_src[] = { 792 F(100000000, P_GPLL0, 6, 0, 0), 793 F(200000000, P_GPLL0, 3, 0, 0), 794 F(404000000, P_MMPLL0_OUT_EVEN, 2, 0, 0), 795 F(480000000, P_MMPLL7_OUT_EVEN, 2, 0, 0), 796 F(576000000, P_MMPLL10_OUT_EVEN, 1, 0, 0), 797 { } 798 }; 799 800 static struct clk_rcg2 fd_core_clk_src = { 801 .cmd_rcgr = 0x3b00, 802 .hid_width = 5, 803 .parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map, 804 .freq_tbl = ftbl_fd_core_clk_src, 805 .clkr.hw.init = &(struct clk_init_data){ 806 .name = "fd_core_clk_src", 807 .parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div, 808 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div), 809 .ops = &clk_rcg2_ops, 810 }, 811 }; 812 813 static const struct freq_tbl ftbl_hdmi_clk_src[] = { 814 F(19200000, P_XO, 1, 0, 0), 815 { } 816 }; 817 818 static struct clk_rcg2 hdmi_clk_src = { 819 .cmd_rcgr = 0x2100, 820 .hid_width = 5, 821 .parent_map = mmss_xo_gpll0_gpll0_div_map, 822 .freq_tbl = ftbl_hdmi_clk_src, 823 .clkr.hw.init = &(struct clk_init_data){ 824 .name = "hdmi_clk_src", 825 .parent_data = mmss_xo_gpll0_gpll0_div, 826 .num_parents = ARRAY_SIZE(mmss_xo_gpll0_gpll0_div), 827 .ops = &clk_rcg2_ops, 828 }, 829 }; 830 831 static const struct freq_tbl ftbl_jpeg0_clk_src[] = { 832 F(75000000, P_GPLL0, 8, 0, 0), 833 F(150000000, P_GPLL0, 4, 0, 0), 834 F(320000000, P_MMPLL7_OUT_EVEN, 3, 0, 0), 835 F(480000000, P_MMPLL7_OUT_EVEN, 2, 0, 0), 836 { } 837 }; 838 839 static struct clk_rcg2 jpeg0_clk_src = { 840 .cmd_rcgr = 0x3500, 841 .hid_width = 5, 842 .parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map, 843 .freq_tbl = ftbl_jpeg0_clk_src, 844 .clkr.hw.init = &(struct clk_init_data){ 845 .name = "jpeg0_clk_src", 846 .parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div, 847 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div), 848 .ops = &clk_rcg2_ops, 849 }, 850 }; 851 852 static const struct freq_tbl ftbl_maxi_clk_src[] = { 853 F(19200000, P_XO, 1, 0, 0), 854 F(75000000, P_GPLL0_DIV, 4, 0, 0), 855 F(171428571, P_GPLL0, 3.5, 0, 0), 856 F(323200000, P_MMPLL0_OUT_EVEN, 2.5, 0, 0), 857 F(406000000, P_MMPLL1_OUT_EVEN, 2, 0, 0), 858 { } 859 }; 860 861 static struct clk_rcg2 maxi_clk_src = { 862 .cmd_rcgr = 0xf020, 863 .hid_width = 5, 864 .parent_map = mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div_map, 865 .freq_tbl = ftbl_maxi_clk_src, 866 .clkr.hw.init = &(struct clk_init_data){ 867 .name = "maxi_clk_src", 868 .parent_data = mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div, 869 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div), 870 .ops = &clk_rcg2_ops, 871 }, 872 }; 873 874 static const struct freq_tbl ftbl_mclk_clk_src[] = { 875 F(4800000, P_XO, 4, 0, 0), 876 F(6000000, P_GPLL0_DIV, 10, 1, 5), 877 F(8000000, P_GPLL0_DIV, 1, 2, 75), 878 F(9600000, P_XO, 2, 0, 0), 879 F(16666667, P_GPLL0_DIV, 2, 1, 9), 880 F(19200000, P_XO, 1, 0, 0), 881 F(24000000, P_GPLL0_DIV, 1, 2, 25), 882 F(33333333, P_GPLL0_DIV, 1, 2, 9), 883 F(48000000, P_GPLL0, 1, 2, 25), 884 F(66666667, P_GPLL0, 1, 2, 9), 885 { } 886 }; 887 888 static struct clk_rcg2 mclk0_clk_src = { 889 .cmd_rcgr = 0x3360, 890 .hid_width = 5, 891 .parent_map = mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map, 892 .freq_tbl = ftbl_mclk_clk_src, 893 .clkr.hw.init = &(struct clk_init_data){ 894 .name = "mclk0_clk_src", 895 .parent_data = mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div, 896 .num_parents = ARRAY_SIZE(mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div), 897 .ops = &clk_rcg2_ops, 898 }, 899 }; 900 901 static struct clk_rcg2 mclk1_clk_src = { 902 .cmd_rcgr = 0x3390, 903 .hid_width = 5, 904 .parent_map = mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map, 905 .freq_tbl = ftbl_mclk_clk_src, 906 .clkr.hw.init = &(struct clk_init_data){ 907 .name = "mclk1_clk_src", 908 .parent_data = mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div, 909 .num_parents = ARRAY_SIZE(mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div), 910 .ops = &clk_rcg2_ops, 911 }, 912 }; 913 914 static struct clk_rcg2 mclk2_clk_src = { 915 .cmd_rcgr = 0x33c0, 916 .hid_width = 5, 917 .parent_map = mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map, 918 .freq_tbl = ftbl_mclk_clk_src, 919 .clkr.hw.init = &(struct clk_init_data){ 920 .name = "mclk2_clk_src", 921 .parent_data = mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div, 922 .num_parents = ARRAY_SIZE(mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div), 923 .ops = &clk_rcg2_ops, 924 }, 925 }; 926 927 static struct clk_rcg2 mclk3_clk_src = { 928 .cmd_rcgr = 0x33f0, 929 .hid_width = 5, 930 .parent_map = mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map, 931 .freq_tbl = ftbl_mclk_clk_src, 932 .clkr.hw.init = &(struct clk_init_data){ 933 .name = "mclk3_clk_src", 934 .parent_data = mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div, 935 .num_parents = ARRAY_SIZE(mmss_xo_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div), 936 .ops = &clk_rcg2_ops, 937 }, 938 }; 939 940 static const struct freq_tbl ftbl_mdp_clk_src[] = { 941 F(85714286, P_GPLL0, 7, 0, 0), 942 F(100000000, P_GPLL0, 6, 0, 0), 943 F(150000000, P_GPLL0, 4, 0, 0), 944 F(171428571, P_GPLL0, 3.5, 0, 0), 945 F(200000000, P_GPLL0, 3, 0, 0), 946 F(275000000, P_MMPLL5_OUT_EVEN, 3, 0, 0), 947 F(300000000, P_GPLL0, 2, 0, 0), 948 F(330000000, P_MMPLL5_OUT_EVEN, 2.5, 0, 0), 949 F(412500000, P_MMPLL5_OUT_EVEN, 2, 0, 0), 950 { } 951 }; 952 953 static struct clk_rcg2 mdp_clk_src = { 954 .cmd_rcgr = 0x2040, 955 .hid_width = 5, 956 .parent_map = mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div_map, 957 .freq_tbl = ftbl_mdp_clk_src, 958 .clkr.hw.init = &(struct clk_init_data){ 959 .name = "mdp_clk_src", 960 .parent_data = mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div, 961 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div), 962 .ops = &clk_rcg2_ops, 963 }, 964 }; 965 966 static const struct freq_tbl ftbl_vsync_clk_src[] = { 967 F(19200000, P_XO, 1, 0, 0), 968 { } 969 }; 970 971 static struct clk_rcg2 vsync_clk_src = { 972 .cmd_rcgr = 0x2080, 973 .hid_width = 5, 974 .parent_map = mmss_xo_gpll0_gpll0_div_map, 975 .freq_tbl = ftbl_vsync_clk_src, 976 .clkr.hw.init = &(struct clk_init_data){ 977 .name = "vsync_clk_src", 978 .parent_data = mmss_xo_gpll0_gpll0_div, 979 .num_parents = ARRAY_SIZE(mmss_xo_gpll0_gpll0_div), 980 .ops = &clk_rcg2_ops, 981 }, 982 }; 983 984 static const struct freq_tbl ftbl_ahb_clk_src[] = { 985 F(19200000, P_XO, 1, 0, 0), 986 F(40000000, P_GPLL0, 15, 0, 0), 987 F(80800000, P_MMPLL0_OUT_EVEN, 10, 0, 0), 988 { } 989 }; 990 991 static struct clk_rcg2 ahb_clk_src = { 992 .cmd_rcgr = 0x5000, 993 .hid_width = 5, 994 .parent_map = mmss_xo_mmpll0_gpll0_gpll0_div_map, 995 .freq_tbl = ftbl_ahb_clk_src, 996 .clkr.hw.init = &(struct clk_init_data){ 997 .name = "ahb_clk_src", 998 .parent_data = mmss_xo_mmpll0_gpll0_gpll0_div, 999 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_gpll0_gpll0_div), 1000 .ops = &clk_rcg2_ops, 1001 }, 1002 }; 1003 1004 static const struct freq_tbl ftbl_axi_clk_src[] = { 1005 F(75000000, P_GPLL0, 8, 0, 0), 1006 F(171428571, P_GPLL0, 3.5, 0, 0), 1007 F(240000000, P_GPLL0, 2.5, 0, 0), 1008 F(323200000, P_MMPLL0_OUT_EVEN, 2.5, 0, 0), 1009 F(406000000, P_MMPLL0_OUT_EVEN, 2, 0, 0), 1010 { } 1011 }; 1012 1013 /* RO to linux */ 1014 static struct clk_rcg2 axi_clk_src = { 1015 .cmd_rcgr = 0xd000, 1016 .hid_width = 5, 1017 .parent_map = mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div_map, 1018 .freq_tbl = ftbl_axi_clk_src, 1019 .clkr.hw.init = &(struct clk_init_data){ 1020 .name = "axi_clk_src", 1021 .parent_data = mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div, 1022 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div), 1023 .ops = &clk_rcg2_ops, 1024 }, 1025 }; 1026 1027 static struct clk_rcg2 pclk0_clk_src = { 1028 .cmd_rcgr = 0x2000, 1029 .mnd_width = 8, 1030 .hid_width = 5, 1031 .parent_map = mmss_xo_dsi0pll_dsi1pll_map, 1032 .clkr.hw.init = &(struct clk_init_data){ 1033 .name = "pclk0_clk_src", 1034 .parent_data = mmss_xo_dsi0pll_dsi1pll, 1035 .num_parents = ARRAY_SIZE(mmss_xo_dsi0pll_dsi1pll), 1036 .ops = &clk_pixel_ops, 1037 .flags = CLK_SET_RATE_PARENT, 1038 }, 1039 }; 1040 1041 static struct clk_rcg2 pclk1_clk_src = { 1042 .cmd_rcgr = 0x2020, 1043 .mnd_width = 8, 1044 .hid_width = 5, 1045 .parent_map = mmss_xo_dsi0pll_dsi1pll_map, 1046 .clkr.hw.init = &(struct clk_init_data){ 1047 .name = "pclk1_clk_src", 1048 .parent_data = mmss_xo_dsi0pll_dsi1pll, 1049 .num_parents = ARRAY_SIZE(mmss_xo_dsi0pll_dsi1pll), 1050 .ops = &clk_pixel_ops, 1051 .flags = CLK_SET_RATE_PARENT, 1052 }, 1053 }; 1054 1055 static const struct freq_tbl ftbl_rot_clk_src[] = { 1056 F(171428571, P_GPLL0, 3.5, 0, 0), 1057 F(275000000, P_MMPLL5_OUT_EVEN, 3, 0, 0), 1058 F(330000000, P_MMPLL5_OUT_EVEN, 2.5, 0, 0), 1059 F(412500000, P_MMPLL5_OUT_EVEN, 2, 0, 0), 1060 { } 1061 }; 1062 1063 static struct clk_rcg2 rot_clk_src = { 1064 .cmd_rcgr = 0x21a0, 1065 .hid_width = 5, 1066 .parent_map = mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div_map, 1067 .freq_tbl = ftbl_rot_clk_src, 1068 .clkr.hw.init = &(struct clk_init_data){ 1069 .name = "rot_clk_src", 1070 .parent_data = mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div, 1071 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div), 1072 .ops = &clk_rcg2_ops, 1073 }, 1074 }; 1075 1076 static const struct freq_tbl ftbl_video_core_clk_src[] = { 1077 F(200000000, P_GPLL0, 3, 0, 0), 1078 F(269330000, P_MMPLL0_OUT_EVEN, 3, 0, 0), 1079 F(355200000, P_MMPLL6_OUT_EVEN, 2.5, 0, 0), 1080 F(444000000, P_MMPLL6_OUT_EVEN, 2, 0, 0), 1081 F(533000000, P_MMPLL3_OUT_EVEN, 2, 0, 0), 1082 { } 1083 }; 1084 1085 static struct clk_rcg2 video_core_clk_src = { 1086 .cmd_rcgr = 0x1000, 1087 .hid_width = 5, 1088 .parent_map = mmss_xo_mmpll0_mmpll3_mmpll6_gpll0_gpll0_div_map, 1089 .freq_tbl = ftbl_video_core_clk_src, 1090 .clkr.hw.init = &(struct clk_init_data){ 1091 .name = "video_core_clk_src", 1092 .parent_data = mmss_xo_mmpll0_mmpll3_mmpll6_gpll0_gpll0_div, 1093 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll3_mmpll6_gpll0_gpll0_div), 1094 .ops = &clk_rcg2_ops, 1095 }, 1096 }; 1097 1098 static struct clk_rcg2 video_subcore0_clk_src = { 1099 .cmd_rcgr = 0x1060, 1100 .hid_width = 5, 1101 .parent_map = mmss_xo_mmpll0_mmpll3_mmpll6_gpll0_gpll0_div_map, 1102 .freq_tbl = ftbl_video_core_clk_src, 1103 .clkr.hw.init = &(struct clk_init_data){ 1104 .name = "video_subcore0_clk_src", 1105 .parent_data = mmss_xo_mmpll0_mmpll3_mmpll6_gpll0_gpll0_div, 1106 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll3_mmpll6_gpll0_gpll0_div), 1107 .ops = &clk_rcg2_ops, 1108 }, 1109 }; 1110 1111 static struct clk_rcg2 video_subcore1_clk_src = { 1112 .cmd_rcgr = 0x1080, 1113 .hid_width = 5, 1114 .parent_map = mmss_xo_mmpll0_mmpll3_mmpll6_gpll0_gpll0_div_map, 1115 .freq_tbl = ftbl_video_core_clk_src, 1116 .clkr.hw.init = &(struct clk_init_data){ 1117 .name = "video_subcore1_clk_src", 1118 .parent_data = mmss_xo_mmpll0_mmpll3_mmpll6_gpll0_gpll0_div, 1119 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll3_mmpll6_gpll0_gpll0_div), 1120 .ops = &clk_rcg2_ops, 1121 }, 1122 }; 1123 1124 static const struct freq_tbl ftbl_vfe_clk_src[] = { 1125 F(200000000, P_GPLL0, 3, 0, 0), 1126 F(300000000, P_GPLL0, 2, 0, 0), 1127 F(320000000, P_MMPLL7_OUT_EVEN, 3, 0, 0), 1128 F(384000000, P_MMPLL4_OUT_EVEN, 2, 0, 0), 1129 F(404000000, P_MMPLL0_OUT_EVEN, 2, 0, 0), 1130 F(480000000, P_MMPLL7_OUT_EVEN, 2, 0, 0), 1131 F(576000000, P_MMPLL10_OUT_EVEN, 1, 0, 0), 1132 F(600000000, P_GPLL0, 1, 0, 0), 1133 { } 1134 }; 1135 1136 static struct clk_rcg2 vfe0_clk_src = { 1137 .cmd_rcgr = 0x3600, 1138 .hid_width = 5, 1139 .parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map, 1140 .freq_tbl = ftbl_vfe_clk_src, 1141 .clkr.hw.init = &(struct clk_init_data){ 1142 .name = "vfe0_clk_src", 1143 .parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div, 1144 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div), 1145 .ops = &clk_rcg2_ops, 1146 }, 1147 }; 1148 1149 static struct clk_rcg2 vfe1_clk_src = { 1150 .cmd_rcgr = 0x3620, 1151 .hid_width = 5, 1152 .parent_map = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div_map, 1153 .freq_tbl = ftbl_vfe_clk_src, 1154 .clkr.hw.init = &(struct clk_init_data){ 1155 .name = "vfe1_clk_src", 1156 .parent_data = mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div, 1157 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_mmpll7_mmpll10_gpll0_gpll0_div), 1158 .ops = &clk_rcg2_ops, 1159 }, 1160 }; 1161 1162 static struct clk_branch misc_ahb_clk = { 1163 .halt_reg = 0x328, 1164 .hwcg_reg = 0x328, 1165 .hwcg_bit = 1, 1166 .clkr = { 1167 .enable_reg = 0x328, 1168 .enable_mask = BIT(0), 1169 .hw.init = &(struct clk_init_data){ 1170 .name = "misc_ahb_clk", 1171 .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 1172 .num_parents = 1, 1173 .ops = &clk_branch2_ops, 1174 .flags = CLK_SET_RATE_PARENT, 1175 }, 1176 }, 1177 }; 1178 1179 static struct clk_branch video_core_clk = { 1180 .halt_reg = 0x1028, 1181 .clkr = { 1182 .enable_reg = 0x1028, 1183 .enable_mask = BIT(0), 1184 .hw.init = &(struct clk_init_data){ 1185 .name = "video_core_clk", 1186 .parent_hws = (const struct clk_hw *[]){ &video_core_clk_src.clkr.hw }, 1187 .num_parents = 1, 1188 .ops = &clk_branch2_ops, 1189 .flags = CLK_SET_RATE_PARENT, 1190 }, 1191 }, 1192 }; 1193 1194 static struct clk_branch video_ahb_clk = { 1195 .halt_reg = 0x1030, 1196 .hwcg_reg = 0x1030, 1197 .hwcg_bit = 1, 1198 .clkr = { 1199 .enable_reg = 0x1030, 1200 .enable_mask = BIT(0), 1201 .hw.init = &(struct clk_init_data){ 1202 .name = "video_ahb_clk", 1203 .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 1204 .num_parents = 1, 1205 .ops = &clk_branch2_ops, 1206 .flags = CLK_SET_RATE_PARENT, 1207 }, 1208 }, 1209 }; 1210 1211 static struct clk_branch video_axi_clk = { 1212 .halt_reg = 0x1034, 1213 .clkr = { 1214 .enable_reg = 0x1034, 1215 .enable_mask = BIT(0), 1216 .hw.init = &(struct clk_init_data){ 1217 .name = "video_axi_clk", 1218 .parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw }, 1219 .num_parents = 1, 1220 .ops = &clk_branch2_ops, 1221 }, 1222 }, 1223 }; 1224 1225 static struct clk_branch video_maxi_clk = { 1226 .halt_reg = 0x1038, 1227 .clkr = { 1228 .enable_reg = 0x1038, 1229 .enable_mask = BIT(0), 1230 .hw.init = &(struct clk_init_data){ 1231 .name = "video_maxi_clk", 1232 .parent_hws = (const struct clk_hw *[]){ &maxi_clk_src.clkr.hw }, 1233 .num_parents = 1, 1234 .ops = &clk_branch2_ops, 1235 .flags = CLK_SET_RATE_PARENT, 1236 }, 1237 }, 1238 }; 1239 1240 static struct clk_branch video_subcore0_clk = { 1241 .halt_reg = 0x1048, 1242 .clkr = { 1243 .enable_reg = 0x1048, 1244 .enable_mask = BIT(0), 1245 .hw.init = &(struct clk_init_data){ 1246 .name = "video_subcore0_clk", 1247 .parent_hws = (const struct clk_hw *[]){ &video_subcore0_clk_src.clkr.hw }, 1248 .num_parents = 1, 1249 .ops = &clk_branch2_ops, 1250 .flags = CLK_SET_RATE_PARENT, 1251 }, 1252 }, 1253 }; 1254 1255 static struct clk_branch video_subcore1_clk = { 1256 .halt_reg = 0x104c, 1257 .clkr = { 1258 .enable_reg = 0x104c, 1259 .enable_mask = BIT(0), 1260 .hw.init = &(struct clk_init_data){ 1261 .name = "video_subcore1_clk", 1262 .parent_hws = (const struct clk_hw *[]){ &video_subcore1_clk_src.clkr.hw }, 1263 .num_parents = 1, 1264 .ops = &clk_branch2_ops, 1265 .flags = CLK_SET_RATE_PARENT, 1266 }, 1267 }, 1268 }; 1269 1270 static struct clk_branch mdss_ahb_clk = { 1271 .halt_reg = 0x2308, 1272 .hwcg_reg = 0x2308, 1273 .hwcg_bit = 1, 1274 .clkr = { 1275 .enable_reg = 0x2308, 1276 .enable_mask = BIT(0), 1277 .hw.init = &(struct clk_init_data){ 1278 .name = "mdss_ahb_clk", 1279 .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 1280 .num_parents = 1, 1281 .ops = &clk_branch2_ops, 1282 .flags = CLK_SET_RATE_PARENT, 1283 }, 1284 }, 1285 }; 1286 1287 static struct clk_branch mdss_hdmi_dp_ahb_clk = { 1288 .halt_reg = 0x230c, 1289 .clkr = { 1290 .enable_reg = 0x230c, 1291 .enable_mask = BIT(0), 1292 .hw.init = &(struct clk_init_data){ 1293 .name = "mdss_hdmi_dp_ahb_clk", 1294 .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 1295 .num_parents = 1, 1296 .ops = &clk_branch2_ops, 1297 .flags = CLK_SET_RATE_PARENT, 1298 }, 1299 }, 1300 }; 1301 1302 static struct clk_branch mdss_axi_clk = { 1303 .halt_reg = 0x2310, 1304 .clkr = { 1305 .enable_reg = 0x2310, 1306 .enable_mask = BIT(0), 1307 .hw.init = &(struct clk_init_data){ 1308 .name = "mdss_axi_clk", 1309 .parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw }, 1310 .num_parents = 1, 1311 .ops = &clk_branch2_ops, 1312 }, 1313 }, 1314 }; 1315 1316 static struct clk_branch mdss_pclk0_clk = { 1317 .halt_reg = 0x2314, 1318 .clkr = { 1319 .enable_reg = 0x2314, 1320 .enable_mask = BIT(0), 1321 .hw.init = &(struct clk_init_data){ 1322 .name = "mdss_pclk0_clk", 1323 .parent_hws = (const struct clk_hw *[]){ &pclk0_clk_src.clkr.hw }, 1324 .num_parents = 1, 1325 .ops = &clk_branch2_ops, 1326 .flags = CLK_SET_RATE_PARENT, 1327 }, 1328 }, 1329 }; 1330 1331 static struct clk_branch mdss_pclk1_clk = { 1332 .halt_reg = 0x2318, 1333 .clkr = { 1334 .enable_reg = 0x2318, 1335 .enable_mask = BIT(0), 1336 .hw.init = &(struct clk_init_data){ 1337 .name = "mdss_pclk1_clk", 1338 .parent_hws = (const struct clk_hw *[]){ &pclk1_clk_src.clkr.hw }, 1339 .num_parents = 1, 1340 .ops = &clk_branch2_ops, 1341 .flags = CLK_SET_RATE_PARENT, 1342 }, 1343 }, 1344 }; 1345 1346 static struct clk_branch mdss_mdp_clk = { 1347 .halt_reg = 0x231c, 1348 .clkr = { 1349 .enable_reg = 0x231c, 1350 .enable_mask = BIT(0), 1351 .hw.init = &(struct clk_init_data){ 1352 .name = "mdss_mdp_clk", 1353 .parent_hws = (const struct clk_hw *[]){ &mdp_clk_src.clkr.hw }, 1354 .num_parents = 1, 1355 .ops = &clk_branch2_ops, 1356 .flags = CLK_SET_RATE_PARENT, 1357 }, 1358 }, 1359 }; 1360 1361 static struct clk_branch mdss_mdp_lut_clk = { 1362 .halt_reg = 0x2320, 1363 .clkr = { 1364 .enable_reg = 0x2320, 1365 .enable_mask = BIT(0), 1366 .hw.init = &(struct clk_init_data){ 1367 .name = "mdss_mdp_lut_clk", 1368 .parent_hws = (const struct clk_hw *[]){ &mdp_clk_src.clkr.hw }, 1369 .num_parents = 1, 1370 .ops = &clk_branch2_ops, 1371 .flags = CLK_SET_RATE_PARENT, 1372 }, 1373 }, 1374 }; 1375 1376 static struct clk_branch mdss_extpclk_clk = { 1377 .halt_reg = 0x2324, 1378 .clkr = { 1379 .enable_reg = 0x2324, 1380 .enable_mask = BIT(0), 1381 .hw.init = &(struct clk_init_data){ 1382 .name = "mdss_extpclk_clk", 1383 .parent_hws = (const struct clk_hw *[]){ &extpclk_clk_src.clkr.hw }, 1384 .num_parents = 1, 1385 .ops = &clk_branch2_ops, 1386 .flags = CLK_SET_RATE_PARENT, 1387 }, 1388 }, 1389 }; 1390 1391 static struct clk_branch mdss_vsync_clk = { 1392 .halt_reg = 0x2328, 1393 .clkr = { 1394 .enable_reg = 0x2328, 1395 .enable_mask = BIT(0), 1396 .hw.init = &(struct clk_init_data){ 1397 .name = "mdss_vsync_clk", 1398 .parent_hws = (const struct clk_hw *[]){ &vsync_clk_src.clkr.hw }, 1399 .num_parents = 1, 1400 .ops = &clk_branch2_ops, 1401 .flags = CLK_SET_RATE_PARENT, 1402 }, 1403 }, 1404 }; 1405 1406 static struct clk_branch mdss_hdmi_clk = { 1407 .halt_reg = 0x2338, 1408 .clkr = { 1409 .enable_reg = 0x2338, 1410 .enable_mask = BIT(0), 1411 .hw.init = &(struct clk_init_data){ 1412 .name = "mdss_hdmi_clk", 1413 .parent_hws = (const struct clk_hw *[]){ &hdmi_clk_src.clkr.hw }, 1414 .num_parents = 1, 1415 .ops = &clk_branch2_ops, 1416 .flags = CLK_SET_RATE_PARENT, 1417 }, 1418 }, 1419 }; 1420 1421 static struct clk_branch mdss_byte0_clk = { 1422 .halt_reg = 0x233c, 1423 .clkr = { 1424 .enable_reg = 0x233c, 1425 .enable_mask = BIT(0), 1426 .hw.init = &(struct clk_init_data){ 1427 .name = "mdss_byte0_clk", 1428 .parent_hws = (const struct clk_hw *[]){ &byte0_clk_src.clkr.hw }, 1429 .num_parents = 1, 1430 .ops = &clk_branch2_ops, 1431 .flags = CLK_SET_RATE_PARENT, 1432 }, 1433 }, 1434 }; 1435 1436 static struct clk_branch mdss_byte1_clk = { 1437 .halt_reg = 0x2340, 1438 .clkr = { 1439 .enable_reg = 0x2340, 1440 .enable_mask = BIT(0), 1441 .hw.init = &(struct clk_init_data){ 1442 .name = "mdss_byte1_clk", 1443 .parent_hws = (const struct clk_hw *[]){ &byte1_clk_src.clkr.hw }, 1444 .num_parents = 1, 1445 .ops = &clk_branch2_ops, 1446 .flags = CLK_SET_RATE_PARENT, 1447 }, 1448 }, 1449 }; 1450 1451 static struct clk_branch mdss_esc0_clk = { 1452 .halt_reg = 0x2344, 1453 .clkr = { 1454 .enable_reg = 0x2344, 1455 .enable_mask = BIT(0), 1456 .hw.init = &(struct clk_init_data){ 1457 .name = "mdss_esc0_clk", 1458 .parent_hws = (const struct clk_hw *[]){ &esc0_clk_src.clkr.hw }, 1459 .num_parents = 1, 1460 .ops = &clk_branch2_ops, 1461 .flags = CLK_SET_RATE_PARENT, 1462 }, 1463 }, 1464 }; 1465 1466 static struct clk_branch mdss_esc1_clk = { 1467 .halt_reg = 0x2348, 1468 .clkr = { 1469 .enable_reg = 0x2348, 1470 .enable_mask = BIT(0), 1471 .hw.init = &(struct clk_init_data){ 1472 .name = "mdss_esc1_clk", 1473 .parent_hws = (const struct clk_hw *[]){ &esc1_clk_src.clkr.hw }, 1474 .num_parents = 1, 1475 .ops = &clk_branch2_ops, 1476 .flags = CLK_SET_RATE_PARENT, 1477 }, 1478 }, 1479 }; 1480 1481 static struct clk_branch mdss_rot_clk = { 1482 .halt_reg = 0x2350, 1483 .clkr = { 1484 .enable_reg = 0x2350, 1485 .enable_mask = BIT(0), 1486 .hw.init = &(struct clk_init_data){ 1487 .name = "mdss_rot_clk", 1488 .parent_hws = (const struct clk_hw *[]){ &rot_clk_src.clkr.hw }, 1489 .num_parents = 1, 1490 .ops = &clk_branch2_ops, 1491 .flags = CLK_SET_RATE_PARENT, 1492 }, 1493 }, 1494 }; 1495 1496 static struct clk_branch mdss_dp_link_clk = { 1497 .halt_reg = 0x2354, 1498 .clkr = { 1499 .enable_reg = 0x2354, 1500 .enable_mask = BIT(0), 1501 .hw.init = &(struct clk_init_data){ 1502 .name = "mdss_dp_link_clk", 1503 .parent_hws = (const struct clk_hw *[]){ &dp_link_clk_src.clkr.hw }, 1504 .num_parents = 1, 1505 .ops = &clk_branch2_ops, 1506 .flags = CLK_SET_RATE_PARENT, 1507 }, 1508 }, 1509 }; 1510 1511 static struct clk_branch mdss_dp_link_intf_clk = { 1512 .halt_reg = 0x2358, 1513 .clkr = { 1514 .enable_reg = 0x2358, 1515 .enable_mask = BIT(0), 1516 .hw.init = &(struct clk_init_data){ 1517 .name = "mdss_dp_link_intf_clk", 1518 .parent_hws = (const struct clk_hw *[]){ &dp_link_clk_src.clkr.hw }, 1519 .num_parents = 1, 1520 .ops = &clk_branch2_ops, 1521 .flags = CLK_SET_RATE_PARENT, 1522 }, 1523 }, 1524 }; 1525 1526 static struct clk_branch mdss_dp_crypto_clk = { 1527 .halt_reg = 0x235c, 1528 .clkr = { 1529 .enable_reg = 0x235c, 1530 .enable_mask = BIT(0), 1531 .hw.init = &(struct clk_init_data){ 1532 .name = "mdss_dp_crypto_clk", 1533 .parent_hws = (const struct clk_hw *[]){ &dp_crypto_clk_src.clkr.hw }, 1534 .num_parents = 1, 1535 .ops = &clk_branch2_ops, 1536 .flags = CLK_SET_RATE_PARENT, 1537 }, 1538 }, 1539 }; 1540 1541 static struct clk_branch mdss_dp_pixel_clk = { 1542 .halt_reg = 0x2360, 1543 .clkr = { 1544 .enable_reg = 0x2360, 1545 .enable_mask = BIT(0), 1546 .hw.init = &(struct clk_init_data){ 1547 .name = "mdss_dp_pixel_clk", 1548 .parent_hws = (const struct clk_hw *[]){ &dp_pixel_clk_src.clkr.hw }, 1549 .num_parents = 1, 1550 .ops = &clk_branch2_ops, 1551 .flags = CLK_SET_RATE_PARENT, 1552 }, 1553 }, 1554 }; 1555 1556 static struct clk_branch mdss_dp_aux_clk = { 1557 .halt_reg = 0x2364, 1558 .clkr = { 1559 .enable_reg = 0x2364, 1560 .enable_mask = BIT(0), 1561 .hw.init = &(struct clk_init_data){ 1562 .name = "mdss_dp_aux_clk", 1563 .parent_hws = (const struct clk_hw *[]){ &dp_aux_clk_src.clkr.hw }, 1564 .num_parents = 1, 1565 .ops = &clk_branch2_ops, 1566 .flags = CLK_SET_RATE_PARENT, 1567 }, 1568 }, 1569 }; 1570 1571 static struct clk_branch mdss_byte0_intf_clk = { 1572 .halt_reg = 0x2374, 1573 .clkr = { 1574 .enable_reg = 0x2374, 1575 .enable_mask = BIT(0), 1576 .hw.init = &(struct clk_init_data){ 1577 .name = "mdss_byte0_intf_clk", 1578 .parent_hws = (const struct clk_hw *[]){ &byte0_clk_src.clkr.hw }, 1579 .num_parents = 1, 1580 .ops = &clk_branch2_ops, 1581 .flags = CLK_SET_RATE_PARENT, 1582 }, 1583 }, 1584 }; 1585 1586 static struct clk_branch mdss_byte1_intf_clk = { 1587 .halt_reg = 0x2378, 1588 .clkr = { 1589 .enable_reg = 0x2378, 1590 .enable_mask = BIT(0), 1591 .hw.init = &(struct clk_init_data){ 1592 .name = "mdss_byte1_intf_clk", 1593 .parent_hws = (const struct clk_hw *[]){ &byte1_clk_src.clkr.hw }, 1594 .num_parents = 1, 1595 .ops = &clk_branch2_ops, 1596 .flags = CLK_SET_RATE_PARENT, 1597 }, 1598 }, 1599 }; 1600 1601 static struct clk_branch camss_csi0phytimer_clk = { 1602 .halt_reg = 0x3024, 1603 .clkr = { 1604 .enable_reg = 0x3024, 1605 .enable_mask = BIT(0), 1606 .hw.init = &(struct clk_init_data){ 1607 .name = "camss_csi0phytimer_clk", 1608 .parent_hws = (const struct clk_hw *[]){ &csi0phytimer_clk_src.clkr.hw }, 1609 .num_parents = 1, 1610 .ops = &clk_branch2_ops, 1611 .flags = CLK_SET_RATE_PARENT, 1612 }, 1613 }, 1614 }; 1615 1616 static struct clk_branch camss_csi1phytimer_clk = { 1617 .halt_reg = 0x3054, 1618 .clkr = { 1619 .enable_reg = 0x3054, 1620 .enable_mask = BIT(0), 1621 .hw.init = &(struct clk_init_data){ 1622 .name = "camss_csi1phytimer_clk", 1623 .parent_hws = (const struct clk_hw *[]){ &csi1phytimer_clk_src.clkr.hw }, 1624 .num_parents = 1, 1625 .ops = &clk_branch2_ops, 1626 .flags = CLK_SET_RATE_PARENT, 1627 }, 1628 }, 1629 }; 1630 1631 static struct clk_branch camss_csi2phytimer_clk = { 1632 .halt_reg = 0x3084, 1633 .clkr = { 1634 .enable_reg = 0x3084, 1635 .enable_mask = BIT(0), 1636 .hw.init = &(struct clk_init_data){ 1637 .name = "camss_csi2phytimer_clk", 1638 .parent_hws = (const struct clk_hw *[]){ &csi2phytimer_clk_src.clkr.hw }, 1639 .num_parents = 1, 1640 .ops = &clk_branch2_ops, 1641 .flags = CLK_SET_RATE_PARENT, 1642 }, 1643 }, 1644 }; 1645 1646 static struct clk_branch camss_csi0_clk = { 1647 .halt_reg = 0x30b4, 1648 .clkr = { 1649 .enable_reg = 0x30b4, 1650 .enable_mask = BIT(0), 1651 .hw.init = &(struct clk_init_data){ 1652 .name = "camss_csi0_clk", 1653 .parent_hws = (const struct clk_hw *[]){ &csi0_clk_src.clkr.hw }, 1654 .num_parents = 1, 1655 .ops = &clk_branch2_ops, 1656 .flags = CLK_SET_RATE_PARENT, 1657 }, 1658 }, 1659 }; 1660 1661 static struct clk_branch camss_csi0_ahb_clk = { 1662 .halt_reg = 0x30bc, 1663 .clkr = { 1664 .enable_reg = 0x30bc, 1665 .enable_mask = BIT(0), 1666 .hw.init = &(struct clk_init_data){ 1667 .name = "camss_csi0_ahb_clk", 1668 .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 1669 .num_parents = 1, 1670 .ops = &clk_branch2_ops, 1671 .flags = CLK_SET_RATE_PARENT, 1672 }, 1673 }, 1674 }; 1675 1676 static struct clk_branch camss_csi0rdi_clk = { 1677 .halt_reg = 0x30d4, 1678 .clkr = { 1679 .enable_reg = 0x30d4, 1680 .enable_mask = BIT(0), 1681 .hw.init = &(struct clk_init_data){ 1682 .name = "camss_csi0rdi_clk", 1683 .parent_hws = (const struct clk_hw *[]){ &csi0_clk_src.clkr.hw }, 1684 .num_parents = 1, 1685 .ops = &clk_branch2_ops, 1686 .flags = CLK_SET_RATE_PARENT, 1687 }, 1688 }, 1689 }; 1690 1691 static struct clk_branch camss_csi0pix_clk = { 1692 .halt_reg = 0x30e4, 1693 .clkr = { 1694 .enable_reg = 0x30e4, 1695 .enable_mask = BIT(0), 1696 .hw.init = &(struct clk_init_data){ 1697 .name = "camss_csi0pix_clk", 1698 .parent_hws = (const struct clk_hw *[]){ &csi0_clk_src.clkr.hw }, 1699 .num_parents = 1, 1700 .ops = &clk_branch2_ops, 1701 .flags = CLK_SET_RATE_PARENT, 1702 }, 1703 }, 1704 }; 1705 1706 static struct clk_branch camss_csi1_clk = { 1707 .halt_reg = 0x3124, 1708 .clkr = { 1709 .enable_reg = 0x3124, 1710 .enable_mask = BIT(0), 1711 .hw.init = &(struct clk_init_data){ 1712 .name = "camss_csi1_clk", 1713 .parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw }, 1714 .num_parents = 1, 1715 .ops = &clk_branch2_ops, 1716 .flags = CLK_SET_RATE_PARENT, 1717 }, 1718 }, 1719 }; 1720 1721 static struct clk_branch camss_csi1_ahb_clk = { 1722 .halt_reg = 0x3128, 1723 .clkr = { 1724 .enable_reg = 0x3128, 1725 .enable_mask = BIT(0), 1726 .hw.init = &(struct clk_init_data){ 1727 .name = "camss_csi1_ahb_clk", 1728 .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 1729 .num_parents = 1, 1730 .ops = &clk_branch2_ops, 1731 .flags = CLK_SET_RATE_PARENT, 1732 }, 1733 }, 1734 }; 1735 1736 static struct clk_branch camss_csi1rdi_clk = { 1737 .halt_reg = 0x3144, 1738 .clkr = { 1739 .enable_reg = 0x3144, 1740 .enable_mask = BIT(0), 1741 .hw.init = &(struct clk_init_data){ 1742 .name = "camss_csi1rdi_clk", 1743 .parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw }, 1744 .num_parents = 1, 1745 .ops = &clk_branch2_ops, 1746 .flags = CLK_SET_RATE_PARENT, 1747 }, 1748 }, 1749 }; 1750 1751 static struct clk_branch camss_csi1pix_clk = { 1752 .halt_reg = 0x3154, 1753 .clkr = { 1754 .enable_reg = 0x3154, 1755 .enable_mask = BIT(0), 1756 .hw.init = &(struct clk_init_data){ 1757 .name = "camss_csi1pix_clk", 1758 .parent_hws = (const struct clk_hw *[]){ &csi1_clk_src.clkr.hw }, 1759 .num_parents = 1, 1760 .ops = &clk_branch2_ops, 1761 .flags = CLK_SET_RATE_PARENT, 1762 }, 1763 }, 1764 }; 1765 1766 static struct clk_branch camss_csi2_clk = { 1767 .halt_reg = 0x3184, 1768 .clkr = { 1769 .enable_reg = 0x3184, 1770 .enable_mask = BIT(0), 1771 .hw.init = &(struct clk_init_data){ 1772 .name = "camss_csi2_clk", 1773 .parent_hws = (const struct clk_hw *[]){ &csi2_clk_src.clkr.hw }, 1774 .num_parents = 1, 1775 .ops = &clk_branch2_ops, 1776 .flags = CLK_SET_RATE_PARENT, 1777 }, 1778 }, 1779 }; 1780 1781 static struct clk_branch camss_csi2_ahb_clk = { 1782 .halt_reg = 0x3188, 1783 .clkr = { 1784 .enable_reg = 0x3188, 1785 .enable_mask = BIT(0), 1786 .hw.init = &(struct clk_init_data){ 1787 .name = "camss_csi2_ahb_clk", 1788 .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 1789 .num_parents = 1, 1790 .ops = &clk_branch2_ops, 1791 .flags = CLK_SET_RATE_PARENT, 1792 }, 1793 }, 1794 }; 1795 1796 static struct clk_branch camss_csi2rdi_clk = { 1797 .halt_reg = 0x31a4, 1798 .clkr = { 1799 .enable_reg = 0x31a4, 1800 .enable_mask = BIT(0), 1801 .hw.init = &(struct clk_init_data){ 1802 .name = "camss_csi2rdi_clk", 1803 .parent_hws = (const struct clk_hw *[]){ &csi2_clk_src.clkr.hw }, 1804 .num_parents = 1, 1805 .ops = &clk_branch2_ops, 1806 .flags = CLK_SET_RATE_PARENT, 1807 }, 1808 }, 1809 }; 1810 1811 static struct clk_branch camss_csi2pix_clk = { 1812 .halt_reg = 0x31b4, 1813 .clkr = { 1814 .enable_reg = 0x31b4, 1815 .enable_mask = BIT(0), 1816 .hw.init = &(struct clk_init_data){ 1817 .name = "camss_csi2pix_clk", 1818 .parent_hws = (const struct clk_hw *[]){ &csi2_clk_src.clkr.hw }, 1819 .num_parents = 1, 1820 .ops = &clk_branch2_ops, 1821 .flags = CLK_SET_RATE_PARENT, 1822 }, 1823 }, 1824 }; 1825 1826 static struct clk_branch camss_csi3_clk = { 1827 .halt_reg = 0x31e4, 1828 .clkr = { 1829 .enable_reg = 0x31e4, 1830 .enable_mask = BIT(0), 1831 .hw.init = &(struct clk_init_data){ 1832 .name = "camss_csi3_clk", 1833 .parent_hws = (const struct clk_hw *[]){ &csi3_clk_src.clkr.hw }, 1834 .num_parents = 1, 1835 .ops = &clk_branch2_ops, 1836 .flags = CLK_SET_RATE_PARENT, 1837 }, 1838 }, 1839 }; 1840 1841 static struct clk_branch camss_csi3_ahb_clk = { 1842 .halt_reg = 0x31e8, 1843 .clkr = { 1844 .enable_reg = 0x31e8, 1845 .enable_mask = BIT(0), 1846 .hw.init = &(struct clk_init_data){ 1847 .name = "camss_csi3_ahb_clk", 1848 .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 1849 .num_parents = 1, 1850 .ops = &clk_branch2_ops, 1851 .flags = CLK_SET_RATE_PARENT, 1852 }, 1853 }, 1854 }; 1855 1856 static struct clk_branch camss_csi3rdi_clk = { 1857 .halt_reg = 0x3204, 1858 .clkr = { 1859 .enable_reg = 0x3204, 1860 .enable_mask = BIT(0), 1861 .hw.init = &(struct clk_init_data){ 1862 .name = "camss_csi3rdi_clk", 1863 .parent_hws = (const struct clk_hw *[]){ &csi3_clk_src.clkr.hw }, 1864 .num_parents = 1, 1865 .ops = &clk_branch2_ops, 1866 .flags = CLK_SET_RATE_PARENT, 1867 }, 1868 }, 1869 }; 1870 1871 static struct clk_branch camss_csi3pix_clk = { 1872 .halt_reg = 0x3214, 1873 .clkr = { 1874 .enable_reg = 0x3214, 1875 .enable_mask = BIT(0), 1876 .hw.init = &(struct clk_init_data){ 1877 .name = "camss_csi3pix_clk", 1878 .parent_hws = (const struct clk_hw *[]){ &csi3_clk_src.clkr.hw }, 1879 .num_parents = 1, 1880 .ops = &clk_branch2_ops, 1881 .flags = CLK_SET_RATE_PARENT, 1882 }, 1883 }, 1884 }; 1885 1886 static struct clk_branch camss_ispif_ahb_clk = { 1887 .halt_reg = 0x3224, 1888 .clkr = { 1889 .enable_reg = 0x3224, 1890 .enable_mask = BIT(0), 1891 .hw.init = &(struct clk_init_data){ 1892 .name = "camss_ispif_ahb_clk", 1893 .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 1894 .num_parents = 1, 1895 .ops = &clk_branch2_ops, 1896 .flags = CLK_SET_RATE_PARENT, 1897 }, 1898 }, 1899 }; 1900 1901 static struct clk_branch camss_cci_clk = { 1902 .halt_reg = 0x3344, 1903 .clkr = { 1904 .enable_reg = 0x3344, 1905 .enable_mask = BIT(0), 1906 .hw.init = &(struct clk_init_data){ 1907 .name = "camss_cci_clk", 1908 .parent_hws = (const struct clk_hw *[]){ &cci_clk_src.clkr.hw }, 1909 .num_parents = 1, 1910 .ops = &clk_branch2_ops, 1911 .flags = CLK_SET_RATE_PARENT, 1912 }, 1913 }, 1914 }; 1915 1916 static struct clk_branch camss_cci_ahb_clk = { 1917 .halt_reg = 0x3348, 1918 .clkr = { 1919 .enable_reg = 0x3348, 1920 .enable_mask = BIT(0), 1921 .hw.init = &(struct clk_init_data){ 1922 .name = "camss_cci_ahb_clk", 1923 .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 1924 .num_parents = 1, 1925 .ops = &clk_branch2_ops, 1926 .flags = CLK_SET_RATE_PARENT, 1927 }, 1928 }, 1929 }; 1930 1931 static struct clk_branch camss_mclk0_clk = { 1932 .halt_reg = 0x3384, 1933 .clkr = { 1934 .enable_reg = 0x3384, 1935 .enable_mask = BIT(0), 1936 .hw.init = &(struct clk_init_data){ 1937 .name = "camss_mclk0_clk", 1938 .parent_hws = (const struct clk_hw *[]){ &mclk0_clk_src.clkr.hw }, 1939 .num_parents = 1, 1940 .ops = &clk_branch2_ops, 1941 .flags = CLK_SET_RATE_PARENT, 1942 }, 1943 }, 1944 }; 1945 1946 static struct clk_branch camss_mclk1_clk = { 1947 .halt_reg = 0x33b4, 1948 .clkr = { 1949 .enable_reg = 0x33b4, 1950 .enable_mask = BIT(0), 1951 .hw.init = &(struct clk_init_data){ 1952 .name = "camss_mclk1_clk", 1953 .parent_hws = (const struct clk_hw *[]){ &mclk1_clk_src.clkr.hw }, 1954 .num_parents = 1, 1955 .ops = &clk_branch2_ops, 1956 .flags = CLK_SET_RATE_PARENT, 1957 }, 1958 }, 1959 }; 1960 1961 static struct clk_branch camss_mclk2_clk = { 1962 .halt_reg = 0x33e4, 1963 .clkr = { 1964 .enable_reg = 0x33e4, 1965 .enable_mask = BIT(0), 1966 .hw.init = &(struct clk_init_data){ 1967 .name = "camss_mclk2_clk", 1968 .parent_hws = (const struct clk_hw *[]){ &mclk2_clk_src.clkr.hw }, 1969 .num_parents = 1, 1970 .ops = &clk_branch2_ops, 1971 .flags = CLK_SET_RATE_PARENT, 1972 }, 1973 }, 1974 }; 1975 1976 static struct clk_branch camss_mclk3_clk = { 1977 .halt_reg = 0x3414, 1978 .clkr = { 1979 .enable_reg = 0x3414, 1980 .enable_mask = BIT(0), 1981 .hw.init = &(struct clk_init_data){ 1982 .name = "camss_mclk3_clk", 1983 .parent_hws = (const struct clk_hw *[]){ &mclk3_clk_src.clkr.hw }, 1984 .num_parents = 1, 1985 .ops = &clk_branch2_ops, 1986 .flags = CLK_SET_RATE_PARENT, 1987 }, 1988 }, 1989 }; 1990 1991 static struct clk_branch camss_top_ahb_clk = { 1992 .halt_reg = 0x3484, 1993 .clkr = { 1994 .enable_reg = 0x3484, 1995 .enable_mask = BIT(0), 1996 .hw.init = &(struct clk_init_data){ 1997 .name = "camss_top_ahb_clk", 1998 .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 1999 .num_parents = 1, 2000 .ops = &clk_branch2_ops, 2001 .flags = CLK_SET_RATE_PARENT, 2002 }, 2003 }, 2004 }; 2005 2006 static struct clk_branch camss_ahb_clk = { 2007 .halt_reg = 0x348c, 2008 .clkr = { 2009 .enable_reg = 0x348c, 2010 .enable_mask = BIT(0), 2011 .hw.init = &(struct clk_init_data){ 2012 .name = "camss_ahb_clk", 2013 .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 2014 .num_parents = 1, 2015 .ops = &clk_branch2_ops, 2016 .flags = CLK_SET_RATE_PARENT, 2017 }, 2018 }, 2019 }; 2020 2021 static struct clk_branch camss_micro_ahb_clk = { 2022 .halt_reg = 0x3494, 2023 .clkr = { 2024 .enable_reg = 0x3494, 2025 .enable_mask = BIT(0), 2026 .hw.init = &(struct clk_init_data){ 2027 .name = "camss_micro_ahb_clk", 2028 .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 2029 .num_parents = 1, 2030 .ops = &clk_branch2_ops, 2031 .flags = CLK_SET_RATE_PARENT, 2032 }, 2033 }, 2034 }; 2035 2036 static struct clk_branch camss_jpeg0_clk = { 2037 .halt_reg = 0x35a8, 2038 .clkr = { 2039 .enable_reg = 0x35a8, 2040 .enable_mask = BIT(0), 2041 .hw.init = &(struct clk_init_data){ 2042 .name = "camss_jpeg0_clk", 2043 .parent_hws = (const struct clk_hw *[]){ &jpeg0_clk_src.clkr.hw }, 2044 .num_parents = 1, 2045 .ops = &clk_branch2_ops, 2046 .flags = CLK_SET_RATE_PARENT, 2047 }, 2048 }, 2049 }; 2050 2051 static struct clk_branch camss_jpeg_ahb_clk = { 2052 .halt_reg = 0x35b4, 2053 .clkr = { 2054 .enable_reg = 0x35b4, 2055 .enable_mask = BIT(0), 2056 .hw.init = &(struct clk_init_data){ 2057 .name = "camss_jpeg_ahb_clk", 2058 .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 2059 .num_parents = 1, 2060 .ops = &clk_branch2_ops, 2061 .flags = CLK_SET_RATE_PARENT, 2062 }, 2063 }, 2064 }; 2065 2066 static struct clk_branch camss_jpeg_axi_clk = { 2067 .halt_reg = 0x35b8, 2068 .clkr = { 2069 .enable_reg = 0x35b8, 2070 .enable_mask = BIT(0), 2071 .hw.init = &(struct clk_init_data){ 2072 .name = "camss_jpeg_axi_clk", 2073 .parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw }, 2074 .num_parents = 1, 2075 .ops = &clk_branch2_ops, 2076 }, 2077 }, 2078 }; 2079 2080 static struct clk_branch camss_vfe0_ahb_clk = { 2081 .halt_reg = 0x3668, 2082 .clkr = { 2083 .enable_reg = 0x3668, 2084 .enable_mask = BIT(0), 2085 .hw.init = &(struct clk_init_data){ 2086 .name = "camss_vfe0_ahb_clk", 2087 .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 2088 .num_parents = 1, 2089 .ops = &clk_branch2_ops, 2090 .flags = CLK_SET_RATE_PARENT, 2091 }, 2092 }, 2093 }; 2094 2095 static struct clk_branch camss_vfe1_ahb_clk = { 2096 .halt_reg = 0x3678, 2097 .clkr = { 2098 .enable_reg = 0x3678, 2099 .enable_mask = BIT(0), 2100 .hw.init = &(struct clk_init_data){ 2101 .name = "camss_vfe1_ahb_clk", 2102 .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 2103 .num_parents = 1, 2104 .ops = &clk_branch2_ops, 2105 .flags = CLK_SET_RATE_PARENT, 2106 }, 2107 }, 2108 }; 2109 2110 static struct clk_branch camss_vfe0_clk = { 2111 .halt_reg = 0x36a8, 2112 .clkr = { 2113 .enable_reg = 0x36a8, 2114 .enable_mask = BIT(0), 2115 .hw.init = &(struct clk_init_data){ 2116 .name = "camss_vfe0_clk", 2117 .parent_hws = (const struct clk_hw *[]){ &vfe0_clk_src.clkr.hw }, 2118 .num_parents = 1, 2119 .ops = &clk_branch2_ops, 2120 .flags = CLK_SET_RATE_PARENT, 2121 }, 2122 }, 2123 }; 2124 2125 static struct clk_branch camss_vfe1_clk = { 2126 .halt_reg = 0x36ac, 2127 .clkr = { 2128 .enable_reg = 0x36ac, 2129 .enable_mask = BIT(0), 2130 .hw.init = &(struct clk_init_data){ 2131 .name = "camss_vfe1_clk", 2132 .parent_hws = (const struct clk_hw *[]){ &vfe1_clk_src.clkr.hw }, 2133 .num_parents = 1, 2134 .ops = &clk_branch2_ops, 2135 .flags = CLK_SET_RATE_PARENT, 2136 }, 2137 }, 2138 }; 2139 2140 static struct clk_branch camss_cpp_clk = { 2141 .halt_reg = 0x36b0, 2142 .clkr = { 2143 .enable_reg = 0x36b0, 2144 .enable_mask = BIT(0), 2145 .hw.init = &(struct clk_init_data){ 2146 .name = "camss_cpp_clk", 2147 .parent_hws = (const struct clk_hw *[]){ &cpp_clk_src.clkr.hw }, 2148 .num_parents = 1, 2149 .ops = &clk_branch2_ops, 2150 .flags = CLK_SET_RATE_PARENT, 2151 }, 2152 }, 2153 }; 2154 2155 static struct clk_branch camss_cpp_ahb_clk = { 2156 .halt_reg = 0x36b4, 2157 .clkr = { 2158 .enable_reg = 0x36b4, 2159 .enable_mask = BIT(0), 2160 .hw.init = &(struct clk_init_data){ 2161 .name = "camss_cpp_ahb_clk", 2162 .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 2163 .num_parents = 1, 2164 .ops = &clk_branch2_ops, 2165 .flags = CLK_SET_RATE_PARENT, 2166 }, 2167 }, 2168 }; 2169 2170 static struct clk_branch camss_vfe_vbif_ahb_clk = { 2171 .halt_reg = 0x36b8, 2172 .clkr = { 2173 .enable_reg = 0x36b8, 2174 .enable_mask = BIT(0), 2175 .hw.init = &(struct clk_init_data){ 2176 .name = "camss_vfe_vbif_ahb_clk", 2177 .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 2178 .num_parents = 1, 2179 .ops = &clk_branch2_ops, 2180 .flags = CLK_SET_RATE_PARENT, 2181 }, 2182 }, 2183 }; 2184 2185 static struct clk_branch camss_vfe_vbif_axi_clk = { 2186 .halt_reg = 0x36bc, 2187 .clkr = { 2188 .enable_reg = 0x36bc, 2189 .enable_mask = BIT(0), 2190 .hw.init = &(struct clk_init_data){ 2191 .name = "camss_vfe_vbif_axi_clk", 2192 .parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw }, 2193 .num_parents = 1, 2194 .ops = &clk_branch2_ops, 2195 }, 2196 }, 2197 }; 2198 2199 static struct clk_branch camss_cpp_axi_clk = { 2200 .halt_reg = 0x36c4, 2201 .clkr = { 2202 .enable_reg = 0x36c4, 2203 .enable_mask = BIT(0), 2204 .hw.init = &(struct clk_init_data){ 2205 .name = "camss_cpp_axi_clk", 2206 .parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw }, 2207 .num_parents = 1, 2208 .ops = &clk_branch2_ops, 2209 }, 2210 }, 2211 }; 2212 2213 static struct clk_branch camss_cpp_vbif_ahb_clk = { 2214 .halt_reg = 0x36c8, 2215 .clkr = { 2216 .enable_reg = 0x36c8, 2217 .enable_mask = BIT(0), 2218 .hw.init = &(struct clk_init_data){ 2219 .name = "camss_cpp_vbif_ahb_clk", 2220 .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 2221 .num_parents = 1, 2222 .ops = &clk_branch2_ops, 2223 .flags = CLK_SET_RATE_PARENT, 2224 }, 2225 }, 2226 }; 2227 2228 static struct clk_branch camss_csi_vfe0_clk = { 2229 .halt_reg = 0x3704, 2230 .clkr = { 2231 .enable_reg = 0x3704, 2232 .enable_mask = BIT(0), 2233 .hw.init = &(struct clk_init_data){ 2234 .name = "camss_csi_vfe0_clk", 2235 .parent_hws = (const struct clk_hw *[]){ &vfe0_clk_src.clkr.hw }, 2236 .num_parents = 1, 2237 .ops = &clk_branch2_ops, 2238 .flags = CLK_SET_RATE_PARENT, 2239 }, 2240 }, 2241 }; 2242 2243 static struct clk_branch camss_csi_vfe1_clk = { 2244 .halt_reg = 0x3714, 2245 .clkr = { 2246 .enable_reg = 0x3714, 2247 .enable_mask = BIT(0), 2248 .hw.init = &(struct clk_init_data){ 2249 .name = "camss_csi_vfe1_clk", 2250 .parent_hws = (const struct clk_hw *[]){ &vfe1_clk_src.clkr.hw }, 2251 .num_parents = 1, 2252 .ops = &clk_branch2_ops, 2253 .flags = CLK_SET_RATE_PARENT, 2254 }, 2255 }, 2256 }; 2257 2258 static struct clk_branch camss_vfe0_stream_clk = { 2259 .halt_reg = 0x3720, 2260 .clkr = { 2261 .enable_reg = 0x3720, 2262 .enable_mask = BIT(0), 2263 .hw.init = &(struct clk_init_data){ 2264 .name = "camss_vfe0_stream_clk", 2265 .parent_hws = (const struct clk_hw *[]){ &vfe0_clk_src.clkr.hw }, 2266 .num_parents = 1, 2267 .ops = &clk_branch2_ops, 2268 .flags = CLK_SET_RATE_PARENT, 2269 }, 2270 }, 2271 }; 2272 2273 static struct clk_branch camss_vfe1_stream_clk = { 2274 .halt_reg = 0x3724, 2275 .clkr = { 2276 .enable_reg = 0x3724, 2277 .enable_mask = BIT(0), 2278 .hw.init = &(struct clk_init_data){ 2279 .name = "camss_vfe1_stream_clk", 2280 .parent_hws = (const struct clk_hw *[]){ &vfe1_clk_src.clkr.hw }, 2281 .num_parents = 1, 2282 .ops = &clk_branch2_ops, 2283 .flags = CLK_SET_RATE_PARENT, 2284 }, 2285 }, 2286 }; 2287 2288 static struct clk_branch camss_cphy_csid0_clk = { 2289 .halt_reg = 0x3730, 2290 .clkr = { 2291 .enable_reg = 0x3730, 2292 .enable_mask = BIT(0), 2293 .hw.init = &(struct clk_init_data){ 2294 .name = "camss_cphy_csid0_clk", 2295 .parent_hws = (const struct clk_hw *[]){ &csiphy_clk_src.clkr.hw }, 2296 .num_parents = 1, 2297 .ops = &clk_branch2_ops, 2298 .flags = CLK_SET_RATE_PARENT, 2299 }, 2300 }, 2301 }; 2302 2303 static struct clk_branch camss_cphy_csid1_clk = { 2304 .halt_reg = 0x3734, 2305 .clkr = { 2306 .enable_reg = 0x3734, 2307 .enable_mask = BIT(0), 2308 .hw.init = &(struct clk_init_data){ 2309 .name = "camss_cphy_csid1_clk", 2310 .parent_hws = (const struct clk_hw *[]){ &csiphy_clk_src.clkr.hw }, 2311 .num_parents = 1, 2312 .ops = &clk_branch2_ops, 2313 .flags = CLK_SET_RATE_PARENT, 2314 }, 2315 }, 2316 }; 2317 2318 static struct clk_branch camss_cphy_csid2_clk = { 2319 .halt_reg = 0x3738, 2320 .clkr = { 2321 .enable_reg = 0x3738, 2322 .enable_mask = BIT(0), 2323 .hw.init = &(struct clk_init_data){ 2324 .name = "camss_cphy_csid2_clk", 2325 .parent_hws = (const struct clk_hw *[]){ &csiphy_clk_src.clkr.hw }, 2326 .num_parents = 1, 2327 .ops = &clk_branch2_ops, 2328 .flags = CLK_SET_RATE_PARENT, 2329 }, 2330 }, 2331 }; 2332 2333 static struct clk_branch camss_cphy_csid3_clk = { 2334 .halt_reg = 0x373c, 2335 .clkr = { 2336 .enable_reg = 0x373c, 2337 .enable_mask = BIT(0), 2338 .hw.init = &(struct clk_init_data){ 2339 .name = "camss_cphy_csid3_clk", 2340 .parent_hws = (const struct clk_hw *[]){ &csiphy_clk_src.clkr.hw }, 2341 .num_parents = 1, 2342 .ops = &clk_branch2_ops, 2343 .flags = CLK_SET_RATE_PARENT, 2344 }, 2345 }, 2346 }; 2347 2348 static struct clk_branch camss_csiphy0_clk = { 2349 .halt_reg = 0x3740, 2350 .clkr = { 2351 .enable_reg = 0x3740, 2352 .enable_mask = BIT(0), 2353 .hw.init = &(struct clk_init_data){ 2354 .name = "camss_csiphy0_clk", 2355 .parent_hws = (const struct clk_hw *[]){ &csiphy_clk_src.clkr.hw }, 2356 .num_parents = 1, 2357 .ops = &clk_branch2_ops, 2358 .flags = CLK_SET_RATE_PARENT, 2359 }, 2360 }, 2361 }; 2362 2363 static struct clk_branch camss_csiphy1_clk = { 2364 .halt_reg = 0x3744, 2365 .clkr = { 2366 .enable_reg = 0x3744, 2367 .enable_mask = BIT(0), 2368 .hw.init = &(struct clk_init_data){ 2369 .name = "camss_csiphy1_clk", 2370 .parent_hws = (const struct clk_hw *[]){ &csiphy_clk_src.clkr.hw }, 2371 .num_parents = 1, 2372 .ops = &clk_branch2_ops, 2373 .flags = CLK_SET_RATE_PARENT, 2374 }, 2375 }, 2376 }; 2377 2378 static struct clk_branch camss_csiphy2_clk = { 2379 .halt_reg = 0x3748, 2380 .clkr = { 2381 .enable_reg = 0x3748, 2382 .enable_mask = BIT(0), 2383 .hw.init = &(struct clk_init_data){ 2384 .name = "camss_csiphy2_clk", 2385 .parent_hws = (const struct clk_hw *[]){ &csiphy_clk_src.clkr.hw }, 2386 .num_parents = 1, 2387 .ops = &clk_branch2_ops, 2388 .flags = CLK_SET_RATE_PARENT, 2389 }, 2390 }, 2391 }; 2392 2393 static struct clk_branch fd_core_clk = { 2394 .halt_reg = 0x3b68, 2395 .clkr = { 2396 .enable_reg = 0x3b68, 2397 .enable_mask = BIT(0), 2398 .hw.init = &(struct clk_init_data){ 2399 .name = "fd_core_clk", 2400 .parent_hws = (const struct clk_hw *[]){ &fd_core_clk_src.clkr.hw }, 2401 .num_parents = 1, 2402 .ops = &clk_branch2_ops, 2403 .flags = CLK_SET_RATE_PARENT, 2404 }, 2405 }, 2406 }; 2407 2408 static struct clk_branch fd_core_uar_clk = { 2409 .halt_reg = 0x3b6c, 2410 .clkr = { 2411 .enable_reg = 0x3b6c, 2412 .enable_mask = BIT(0), 2413 .hw.init = &(struct clk_init_data){ 2414 .name = "fd_core_uar_clk", 2415 .parent_hws = (const struct clk_hw *[]){ &fd_core_clk_src.clkr.hw }, 2416 .num_parents = 1, 2417 .ops = &clk_branch2_ops, 2418 .flags = CLK_SET_RATE_PARENT, 2419 }, 2420 }, 2421 }; 2422 2423 static struct clk_branch fd_ahb_clk = { 2424 .halt_reg = 0x3b74, 2425 .clkr = { 2426 .enable_reg = 0x3b74, 2427 .enable_mask = BIT(0), 2428 .hw.init = &(struct clk_init_data){ 2429 .name = "fd_ahb_clk", 2430 .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 2431 .num_parents = 1, 2432 .ops = &clk_branch2_ops, 2433 .flags = CLK_SET_RATE_PARENT, 2434 }, 2435 }, 2436 }; 2437 2438 static struct clk_branch mnoc_ahb_clk = { 2439 .halt_reg = 0x5024, 2440 .halt_check = BRANCH_HALT_SKIP, 2441 .clkr = { 2442 .enable_reg = 0x5024, 2443 .enable_mask = BIT(0), 2444 .hw.init = &(struct clk_init_data){ 2445 .name = "mnoc_ahb_clk", 2446 .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 2447 .num_parents = 1, 2448 .ops = &clk_branch2_ops, 2449 .flags = CLK_SET_RATE_PARENT, 2450 }, 2451 }, 2452 }; 2453 2454 static struct clk_branch bimc_smmu_ahb_clk = { 2455 .halt_reg = 0xe004, 2456 .halt_check = BRANCH_HALT_SKIP, 2457 .hwcg_reg = 0xe004, 2458 .hwcg_bit = 1, 2459 .clkr = { 2460 .enable_reg = 0xe004, 2461 .enable_mask = BIT(0), 2462 .hw.init = &(struct clk_init_data){ 2463 .name = "bimc_smmu_ahb_clk", 2464 .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 2465 .num_parents = 1, 2466 .ops = &clk_branch2_ops, 2467 .flags = CLK_SET_RATE_PARENT, 2468 }, 2469 }, 2470 }; 2471 2472 static struct clk_branch bimc_smmu_axi_clk = { 2473 .halt_reg = 0xe008, 2474 .halt_check = BRANCH_HALT_SKIP, 2475 .hwcg_reg = 0xe008, 2476 .hwcg_bit = 1, 2477 .clkr = { 2478 .enable_reg = 0xe008, 2479 .enable_mask = BIT(0), 2480 .hw.init = &(struct clk_init_data){ 2481 .name = "bimc_smmu_axi_clk", 2482 .parent_hws = (const struct clk_hw *[]){ &axi_clk_src.clkr.hw }, 2483 .num_parents = 1, 2484 .ops = &clk_branch2_ops, 2485 }, 2486 }, 2487 }; 2488 2489 static struct clk_branch mnoc_maxi_clk = { 2490 .halt_reg = 0xf004, 2491 .clkr = { 2492 .enable_reg = 0xf004, 2493 .enable_mask = BIT(0), 2494 .hw.init = &(struct clk_init_data){ 2495 .name = "mnoc_maxi_clk", 2496 .parent_hws = (const struct clk_hw *[]){ &maxi_clk_src.clkr.hw }, 2497 .num_parents = 1, 2498 .ops = &clk_branch2_ops, 2499 .flags = CLK_SET_RATE_PARENT, 2500 }, 2501 }, 2502 }; 2503 2504 static struct clk_branch vmem_maxi_clk = { 2505 .halt_reg = 0xf064, 2506 .clkr = { 2507 .enable_reg = 0xf064, 2508 .enable_mask = BIT(0), 2509 .hw.init = &(struct clk_init_data){ 2510 .name = "vmem_maxi_clk", 2511 .parent_hws = (const struct clk_hw *[]){ &maxi_clk_src.clkr.hw }, 2512 .num_parents = 1, 2513 .ops = &clk_branch2_ops, 2514 .flags = CLK_SET_RATE_PARENT, 2515 }, 2516 }, 2517 }; 2518 2519 static struct clk_branch vmem_ahb_clk = { 2520 .halt_reg = 0xf068, 2521 .clkr = { 2522 .enable_reg = 0xf068, 2523 .enable_mask = BIT(0), 2524 .hw.init = &(struct clk_init_data){ 2525 .name = "vmem_ahb_clk", 2526 .parent_hws = (const struct clk_hw *[]){ &ahb_clk_src.clkr.hw }, 2527 .num_parents = 1, 2528 .ops = &clk_branch2_ops, 2529 .flags = CLK_SET_RATE_PARENT, 2530 }, 2531 }, 2532 }; 2533 2534 static struct gdsc video_top_gdsc = { 2535 .gdscr = 0x1024, 2536 .cxcs = (unsigned int []){ 0x1028, 0x1034, 0x1038 }, 2537 .cxc_count = 3, 2538 .pd = { 2539 .name = "video_top", 2540 }, 2541 .pwrsts = PWRSTS_OFF_ON, 2542 }; 2543 2544 static struct gdsc video_subcore0_gdsc = { 2545 .gdscr = 0x1040, 2546 .cxcs = (unsigned int []){ 0x1048 }, 2547 .cxc_count = 1, 2548 .pd = { 2549 .name = "video_subcore0", 2550 }, 2551 .parent = &video_top_gdsc.pd, 2552 .pwrsts = PWRSTS_OFF_ON, 2553 .flags = HW_CTRL, 2554 }; 2555 2556 static struct gdsc video_subcore1_gdsc = { 2557 .gdscr = 0x1044, 2558 .cxcs = (unsigned int []){ 0x104c }, 2559 .cxc_count = 1, 2560 .pd = { 2561 .name = "video_subcore1", 2562 }, 2563 .parent = &video_top_gdsc.pd, 2564 .pwrsts = PWRSTS_OFF_ON, 2565 .flags = HW_CTRL, 2566 }; 2567 2568 static struct gdsc mdss_gdsc = { 2569 .gdscr = 0x2304, 2570 .cxcs = (unsigned int []){ 0x2310, 0x2350, 0x231c, 0x2320 }, 2571 .cxc_count = 4, 2572 .pd = { 2573 .name = "mdss", 2574 }, 2575 .pwrsts = PWRSTS_OFF_ON, 2576 }; 2577 2578 static struct gdsc camss_top_gdsc = { 2579 .gdscr = 0x34a0, 2580 .cxcs = (unsigned int []){ 0x35b8, 0x36c4, 0x3704, 0x3714, 0x3494, 2581 0x35a8, 0x3868 }, 2582 .cxc_count = 7, 2583 .pd = { 2584 .name = "camss_top", 2585 }, 2586 .pwrsts = PWRSTS_OFF_ON, 2587 }; 2588 2589 static struct gdsc camss_vfe0_gdsc = { 2590 .gdscr = 0x3664, 2591 .pd = { 2592 .name = "camss_vfe0", 2593 }, 2594 .parent = &camss_top_gdsc.pd, 2595 .pwrsts = PWRSTS_OFF_ON, 2596 }; 2597 2598 static struct gdsc camss_vfe1_gdsc = { 2599 .gdscr = 0x3674, 2600 .pd = { 2601 .name = "camss_vfe1_gdsc", 2602 }, 2603 .parent = &camss_top_gdsc.pd, 2604 .pwrsts = PWRSTS_OFF_ON, 2605 }; 2606 2607 static struct gdsc camss_cpp_gdsc = { 2608 .gdscr = 0x36d4, 2609 .pd = { 2610 .name = "camss_cpp", 2611 }, 2612 .parent = &camss_top_gdsc.pd, 2613 .pwrsts = PWRSTS_OFF_ON, 2614 }; 2615 2616 static struct gdsc bimc_smmu_gdsc = { 2617 .gdscr = 0xe020, 2618 .gds_hw_ctrl = 0xe024, 2619 .cxcs = (unsigned int []){ 0xe008 }, 2620 .cxc_count = 1, 2621 .pd = { 2622 .name = "bimc_smmu", 2623 }, 2624 .pwrsts = PWRSTS_OFF_ON, 2625 .flags = VOTABLE, 2626 }; 2627 2628 static struct clk_regmap *mmcc_msm8998_clocks[] = { 2629 [MMPLL0] = &mmpll0.clkr, 2630 [MMPLL0_OUT_EVEN] = &mmpll0_out_even.clkr, 2631 [MMPLL1] = &mmpll1.clkr, 2632 [MMPLL1_OUT_EVEN] = &mmpll1_out_even.clkr, 2633 [MMPLL3] = &mmpll3.clkr, 2634 [MMPLL3_OUT_EVEN] = &mmpll3_out_even.clkr, 2635 [MMPLL4] = &mmpll4.clkr, 2636 [MMPLL4_OUT_EVEN] = &mmpll4_out_even.clkr, 2637 [MMPLL5] = &mmpll5.clkr, 2638 [MMPLL5_OUT_EVEN] = &mmpll5_out_even.clkr, 2639 [MMPLL6] = &mmpll6.clkr, 2640 [MMPLL6_OUT_EVEN] = &mmpll6_out_even.clkr, 2641 [MMPLL7] = &mmpll7.clkr, 2642 [MMPLL7_OUT_EVEN] = &mmpll7_out_even.clkr, 2643 [MMPLL10] = &mmpll10.clkr, 2644 [MMPLL10_OUT_EVEN] = &mmpll10_out_even.clkr, 2645 [BYTE0_CLK_SRC] = &byte0_clk_src.clkr, 2646 [BYTE1_CLK_SRC] = &byte1_clk_src.clkr, 2647 [CCI_CLK_SRC] = &cci_clk_src.clkr, 2648 [CPP_CLK_SRC] = &cpp_clk_src.clkr, 2649 [CSI0_CLK_SRC] = &csi0_clk_src.clkr, 2650 [CSI1_CLK_SRC] = &csi1_clk_src.clkr, 2651 [CSI2_CLK_SRC] = &csi2_clk_src.clkr, 2652 [CSI3_CLK_SRC] = &csi3_clk_src.clkr, 2653 [CSIPHY_CLK_SRC] = &csiphy_clk_src.clkr, 2654 [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr, 2655 [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr, 2656 [CSI2PHYTIMER_CLK_SRC] = &csi2phytimer_clk_src.clkr, 2657 [DP_AUX_CLK_SRC] = &dp_aux_clk_src.clkr, 2658 [DP_CRYPTO_CLK_SRC] = &dp_crypto_clk_src.clkr, 2659 [DP_LINK_CLK_SRC] = &dp_link_clk_src.clkr, 2660 [DP_PIXEL_CLK_SRC] = &dp_pixel_clk_src.clkr, 2661 [ESC0_CLK_SRC] = &esc0_clk_src.clkr, 2662 [ESC1_CLK_SRC] = &esc1_clk_src.clkr, 2663 [EXTPCLK_CLK_SRC] = &extpclk_clk_src.clkr, 2664 [FD_CORE_CLK_SRC] = &fd_core_clk_src.clkr, 2665 [HDMI_CLK_SRC] = &hdmi_clk_src.clkr, 2666 [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr, 2667 [MAXI_CLK_SRC] = &maxi_clk_src.clkr, 2668 [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr, 2669 [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr, 2670 [MCLK2_CLK_SRC] = &mclk2_clk_src.clkr, 2671 [MCLK3_CLK_SRC] = &mclk3_clk_src.clkr, 2672 [MDP_CLK_SRC] = &mdp_clk_src.clkr, 2673 [VSYNC_CLK_SRC] = &vsync_clk_src.clkr, 2674 [AHB_CLK_SRC] = &ahb_clk_src.clkr, 2675 [AXI_CLK_SRC] = &axi_clk_src.clkr, 2676 [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr, 2677 [PCLK1_CLK_SRC] = &pclk1_clk_src.clkr, 2678 [ROT_CLK_SRC] = &rot_clk_src.clkr, 2679 [VIDEO_CORE_CLK_SRC] = &video_core_clk_src.clkr, 2680 [VIDEO_SUBCORE0_CLK_SRC] = &video_subcore0_clk_src.clkr, 2681 [VIDEO_SUBCORE1_CLK_SRC] = &video_subcore1_clk_src.clkr, 2682 [VFE0_CLK_SRC] = &vfe0_clk_src.clkr, 2683 [VFE1_CLK_SRC] = &vfe1_clk_src.clkr, 2684 [MISC_AHB_CLK] = &misc_ahb_clk.clkr, 2685 [VIDEO_CORE_CLK] = &video_core_clk.clkr, 2686 [VIDEO_AHB_CLK] = &video_ahb_clk.clkr, 2687 [VIDEO_AXI_CLK] = &video_axi_clk.clkr, 2688 [VIDEO_MAXI_CLK] = &video_maxi_clk.clkr, 2689 [VIDEO_SUBCORE0_CLK] = &video_subcore0_clk.clkr, 2690 [VIDEO_SUBCORE1_CLK] = &video_subcore1_clk.clkr, 2691 [MDSS_AHB_CLK] = &mdss_ahb_clk.clkr, 2692 [MDSS_HDMI_DP_AHB_CLK] = &mdss_hdmi_dp_ahb_clk.clkr, 2693 [MDSS_AXI_CLK] = &mdss_axi_clk.clkr, 2694 [MDSS_PCLK0_CLK] = &mdss_pclk0_clk.clkr, 2695 [MDSS_PCLK1_CLK] = &mdss_pclk1_clk.clkr, 2696 [MDSS_MDP_CLK] = &mdss_mdp_clk.clkr, 2697 [MDSS_MDP_LUT_CLK] = &mdss_mdp_lut_clk.clkr, 2698 [MDSS_EXTPCLK_CLK] = &mdss_extpclk_clk.clkr, 2699 [MDSS_VSYNC_CLK] = &mdss_vsync_clk.clkr, 2700 [MDSS_HDMI_CLK] = &mdss_hdmi_clk.clkr, 2701 [MDSS_BYTE0_CLK] = &mdss_byte0_clk.clkr, 2702 [MDSS_BYTE1_CLK] = &mdss_byte1_clk.clkr, 2703 [MDSS_ESC0_CLK] = &mdss_esc0_clk.clkr, 2704 [MDSS_ESC1_CLK] = &mdss_esc1_clk.clkr, 2705 [MDSS_ROT_CLK] = &mdss_rot_clk.clkr, 2706 [MDSS_DP_LINK_CLK] = &mdss_dp_link_clk.clkr, 2707 [MDSS_DP_LINK_INTF_CLK] = &mdss_dp_link_intf_clk.clkr, 2708 [MDSS_DP_CRYPTO_CLK] = &mdss_dp_crypto_clk.clkr, 2709 [MDSS_DP_PIXEL_CLK] = &mdss_dp_pixel_clk.clkr, 2710 [MDSS_DP_AUX_CLK] = &mdss_dp_aux_clk.clkr, 2711 [MDSS_BYTE0_INTF_CLK] = &mdss_byte0_intf_clk.clkr, 2712 [MDSS_BYTE1_INTF_CLK] = &mdss_byte1_intf_clk.clkr, 2713 [CAMSS_CSI0PHYTIMER_CLK] = &camss_csi0phytimer_clk.clkr, 2714 [CAMSS_CSI1PHYTIMER_CLK] = &camss_csi1phytimer_clk.clkr, 2715 [CAMSS_CSI2PHYTIMER_CLK] = &camss_csi2phytimer_clk.clkr, 2716 [CAMSS_CSI0_CLK] = &camss_csi0_clk.clkr, 2717 [CAMSS_CSI0_AHB_CLK] = &camss_csi0_ahb_clk.clkr, 2718 [CAMSS_CSI0RDI_CLK] = &camss_csi0rdi_clk.clkr, 2719 [CAMSS_CSI0PIX_CLK] = &camss_csi0pix_clk.clkr, 2720 [CAMSS_CSI1_CLK] = &camss_csi1_clk.clkr, 2721 [CAMSS_CSI1_AHB_CLK] = &camss_csi1_ahb_clk.clkr, 2722 [CAMSS_CSI1RDI_CLK] = &camss_csi1rdi_clk.clkr, 2723 [CAMSS_CSI1PIX_CLK] = &camss_csi1pix_clk.clkr, 2724 [CAMSS_CSI2_CLK] = &camss_csi2_clk.clkr, 2725 [CAMSS_CSI2_AHB_CLK] = &camss_csi2_ahb_clk.clkr, 2726 [CAMSS_CSI2RDI_CLK] = &camss_csi2rdi_clk.clkr, 2727 [CAMSS_CSI2PIX_CLK] = &camss_csi2pix_clk.clkr, 2728 [CAMSS_CSI3_CLK] = &camss_csi3_clk.clkr, 2729 [CAMSS_CSI3_AHB_CLK] = &camss_csi3_ahb_clk.clkr, 2730 [CAMSS_CSI3RDI_CLK] = &camss_csi3rdi_clk.clkr, 2731 [CAMSS_CSI3PIX_CLK] = &camss_csi3pix_clk.clkr, 2732 [CAMSS_ISPIF_AHB_CLK] = &camss_ispif_ahb_clk.clkr, 2733 [CAMSS_CCI_CLK] = &camss_cci_clk.clkr, 2734 [CAMSS_CCI_AHB_CLK] = &camss_cci_ahb_clk.clkr, 2735 [CAMSS_MCLK0_CLK] = &camss_mclk0_clk.clkr, 2736 [CAMSS_MCLK1_CLK] = &camss_mclk1_clk.clkr, 2737 [CAMSS_MCLK2_CLK] = &camss_mclk2_clk.clkr, 2738 [CAMSS_MCLK3_CLK] = &camss_mclk3_clk.clkr, 2739 [CAMSS_TOP_AHB_CLK] = &camss_top_ahb_clk.clkr, 2740 [CAMSS_AHB_CLK] = &camss_ahb_clk.clkr, 2741 [CAMSS_MICRO_AHB_CLK] = &camss_micro_ahb_clk.clkr, 2742 [CAMSS_JPEG0_CLK] = &camss_jpeg0_clk.clkr, 2743 [CAMSS_JPEG_AHB_CLK] = &camss_jpeg_ahb_clk.clkr, 2744 [CAMSS_JPEG_AXI_CLK] = &camss_jpeg_axi_clk.clkr, 2745 [CAMSS_VFE0_AHB_CLK] = &camss_vfe0_ahb_clk.clkr, 2746 [CAMSS_VFE1_AHB_CLK] = &camss_vfe1_ahb_clk.clkr, 2747 [CAMSS_VFE0_CLK] = &camss_vfe0_clk.clkr, 2748 [CAMSS_VFE1_CLK] = &camss_vfe1_clk.clkr, 2749 [CAMSS_CPP_CLK] = &camss_cpp_clk.clkr, 2750 [CAMSS_CPP_AHB_CLK] = &camss_cpp_ahb_clk.clkr, 2751 [CAMSS_VFE_VBIF_AHB_CLK] = &camss_vfe_vbif_ahb_clk.clkr, 2752 [CAMSS_VFE_VBIF_AXI_CLK] = &camss_vfe_vbif_axi_clk.clkr, 2753 [CAMSS_CPP_AXI_CLK] = &camss_cpp_axi_clk.clkr, 2754 [CAMSS_CPP_VBIF_AHB_CLK] = &camss_cpp_vbif_ahb_clk.clkr, 2755 [CAMSS_CSI_VFE0_CLK] = &camss_csi_vfe0_clk.clkr, 2756 [CAMSS_CSI_VFE1_CLK] = &camss_csi_vfe1_clk.clkr, 2757 [CAMSS_VFE0_STREAM_CLK] = &camss_vfe0_stream_clk.clkr, 2758 [CAMSS_VFE1_STREAM_CLK] = &camss_vfe1_stream_clk.clkr, 2759 [CAMSS_CPHY_CSID0_CLK] = &camss_cphy_csid0_clk.clkr, 2760 [CAMSS_CPHY_CSID1_CLK] = &camss_cphy_csid1_clk.clkr, 2761 [CAMSS_CPHY_CSID2_CLK] = &camss_cphy_csid2_clk.clkr, 2762 [CAMSS_CPHY_CSID3_CLK] = &camss_cphy_csid3_clk.clkr, 2763 [CAMSS_CSIPHY0_CLK] = &camss_csiphy0_clk.clkr, 2764 [CAMSS_CSIPHY1_CLK] = &camss_csiphy1_clk.clkr, 2765 [CAMSS_CSIPHY2_CLK] = &camss_csiphy2_clk.clkr, 2766 [FD_CORE_CLK] = &fd_core_clk.clkr, 2767 [FD_CORE_UAR_CLK] = &fd_core_uar_clk.clkr, 2768 [FD_AHB_CLK] = &fd_ahb_clk.clkr, 2769 [MNOC_AHB_CLK] = &mnoc_ahb_clk.clkr, 2770 [BIMC_SMMU_AHB_CLK] = &bimc_smmu_ahb_clk.clkr, 2771 [BIMC_SMMU_AXI_CLK] = &bimc_smmu_axi_clk.clkr, 2772 [MNOC_MAXI_CLK] = &mnoc_maxi_clk.clkr, 2773 [VMEM_MAXI_CLK] = &vmem_maxi_clk.clkr, 2774 [VMEM_AHB_CLK] = &vmem_ahb_clk.clkr, 2775 }; 2776 2777 static struct gdsc *mmcc_msm8998_gdscs[] = { 2778 [VIDEO_TOP_GDSC] = &video_top_gdsc, 2779 [VIDEO_SUBCORE0_GDSC] = &video_subcore0_gdsc, 2780 [VIDEO_SUBCORE1_GDSC] = &video_subcore1_gdsc, 2781 [MDSS_GDSC] = &mdss_gdsc, 2782 [CAMSS_TOP_GDSC] = &camss_top_gdsc, 2783 [CAMSS_VFE0_GDSC] = &camss_vfe0_gdsc, 2784 [CAMSS_VFE1_GDSC] = &camss_vfe1_gdsc, 2785 [CAMSS_CPP_GDSC] = &camss_cpp_gdsc, 2786 [BIMC_SMMU_GDSC] = &bimc_smmu_gdsc, 2787 }; 2788 2789 static const struct qcom_reset_map mmcc_msm8998_resets[] = { 2790 [SPDM_BCR] = { 0x200 }, 2791 [SPDM_RM_BCR] = { 0x300 }, 2792 [MISC_BCR] = { 0x320 }, 2793 [VIDEO_TOP_BCR] = { 0x1020 }, 2794 [THROTTLE_VIDEO_BCR] = { 0x1180 }, 2795 [MDSS_BCR] = { 0x2300 }, 2796 [THROTTLE_MDSS_BCR] = { 0x2460 }, 2797 [CAMSS_PHY0_BCR] = { 0x3020 }, 2798 [CAMSS_PHY1_BCR] = { 0x3050 }, 2799 [CAMSS_PHY2_BCR] = { 0x3080 }, 2800 [CAMSS_CSI0_BCR] = { 0x30b0 }, 2801 [CAMSS_CSI0RDI_BCR] = { 0x30d0 }, 2802 [CAMSS_CSI0PIX_BCR] = { 0x30e0 }, 2803 [CAMSS_CSI1_BCR] = { 0x3120 }, 2804 [CAMSS_CSI1RDI_BCR] = { 0x3140 }, 2805 [CAMSS_CSI1PIX_BCR] = { 0x3150 }, 2806 [CAMSS_CSI2_BCR] = { 0x3180 }, 2807 [CAMSS_CSI2RDI_BCR] = { 0x31a0 }, 2808 [CAMSS_CSI2PIX_BCR] = { 0x31b0 }, 2809 [CAMSS_CSI3_BCR] = { 0x31e0 }, 2810 [CAMSS_CSI3RDI_BCR] = { 0x3200 }, 2811 [CAMSS_CSI3PIX_BCR] = { 0x3210 }, 2812 [CAMSS_ISPIF_BCR] = { 0x3220 }, 2813 [CAMSS_CCI_BCR] = { 0x3340 }, 2814 [CAMSS_TOP_BCR] = { 0x3480 }, 2815 [CAMSS_AHB_BCR] = { 0x3488 }, 2816 [CAMSS_MICRO_BCR] = { 0x3490 }, 2817 [CAMSS_JPEG_BCR] = { 0x35a0 }, 2818 [CAMSS_VFE0_BCR] = { 0x3660 }, 2819 [CAMSS_VFE1_BCR] = { 0x3670 }, 2820 [CAMSS_VFE_VBIF_BCR] = { 0x36a0 }, 2821 [CAMSS_CPP_TOP_BCR] = { 0x36c0 }, 2822 [CAMSS_CPP_BCR] = { 0x36d0 }, 2823 [CAMSS_CSI_VFE0_BCR] = { 0x3700 }, 2824 [CAMSS_CSI_VFE1_BCR] = { 0x3710 }, 2825 [CAMSS_FD_BCR] = { 0x3b60 }, 2826 [THROTTLE_CAMSS_BCR] = { 0x3c30 }, 2827 [MNOCAHB_BCR] = { 0x5020 }, 2828 [MNOCAXI_BCR] = { 0xd020 }, 2829 [BMIC_SMMU_BCR] = { 0xe000 }, 2830 [MNOC_MAXI_BCR] = { 0xf000 }, 2831 [VMEM_BCR] = { 0xf060 }, 2832 [BTO_BCR] = { 0x10004 }, 2833 }; 2834 2835 static const struct regmap_config mmcc_msm8998_regmap_config = { 2836 .reg_bits = 32, 2837 .reg_stride = 4, 2838 .val_bits = 32, 2839 .max_register = 0x10004, 2840 .fast_io = true, 2841 }; 2842 2843 static const struct qcom_cc_desc mmcc_msm8998_desc = { 2844 .config = &mmcc_msm8998_regmap_config, 2845 .clks = mmcc_msm8998_clocks, 2846 .num_clks = ARRAY_SIZE(mmcc_msm8998_clocks), 2847 .resets = mmcc_msm8998_resets, 2848 .num_resets = ARRAY_SIZE(mmcc_msm8998_resets), 2849 .gdscs = mmcc_msm8998_gdscs, 2850 .num_gdscs = ARRAY_SIZE(mmcc_msm8998_gdscs), 2851 }; 2852 2853 static const struct of_device_id mmcc_msm8998_match_table[] = { 2854 { .compatible = "qcom,mmcc-msm8998" }, 2855 { } 2856 }; 2857 MODULE_DEVICE_TABLE(of, mmcc_msm8998_match_table); 2858 2859 static int mmcc_msm8998_probe(struct platform_device *pdev) 2860 { 2861 struct regmap *regmap; 2862 2863 regmap = qcom_cc_map(pdev, &mmcc_msm8998_desc); 2864 if (IS_ERR(regmap)) 2865 return PTR_ERR(regmap); 2866 2867 return qcom_cc_really_probe(&pdev->dev, &mmcc_msm8998_desc, regmap); 2868 } 2869 2870 static struct platform_driver mmcc_msm8998_driver = { 2871 .probe = mmcc_msm8998_probe, 2872 .driver = { 2873 .name = "mmcc-msm8998", 2874 .of_match_table = mmcc_msm8998_match_table, 2875 }, 2876 }; 2877 module_platform_driver(mmcc_msm8998_driver); 2878 2879 MODULE_DESCRIPTION("QCOM MMCC MSM8998 Driver"); 2880 MODULE_LICENSE("GPL v2"); 2881