Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

clk: qcom: gcc: Register QUPv3 RCGs for DFS on SDM845

QUPv3 clocks support DFS and thus register the RCGs which require support
for the same.

Signed-off-by: Taniya Das <tdas@codeaurora.org>
[sboyd@kernel.org: Use new macro, split out init structures so they
don't have to be copied]
Signed-off-by: Stephen Boyd <sboyd@kernel.org>

authored by

Taniya Das and committed by
Stephen Boyd
8b69c6db cc4f6944

+153 -96
+153 -96
drivers/clk/qcom/gcc-sdm845.c
··· 396 396 { } 397 397 }; 398 398 399 + static struct clk_init_data gcc_qupv3_wrap0_s0_clk_init = { 400 + .name = "gcc_qupv3_wrap0_s0_clk_src", 401 + .parent_names = gcc_parent_names_0, 402 + .num_parents = 4, 403 + .ops = &clk_rcg2_shared_ops, 404 + }; 405 + 399 406 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = { 400 407 .cmd_rcgr = 0x17034, 401 408 .mnd_width = 16, 402 409 .hid_width = 5, 403 410 .parent_map = gcc_parent_map_0, 404 411 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 405 - .clkr.hw.init = &(struct clk_init_data){ 406 - .name = "gcc_qupv3_wrap0_s0_clk_src", 407 - .parent_names = gcc_parent_names_0, 408 - .num_parents = 4, 409 - .ops = &clk_rcg2_shared_ops, 410 - }, 412 + .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_init, 413 + }; 414 + 415 + static struct clk_init_data gcc_qupv3_wrap0_s1_clk_init = { 416 + .name = "gcc_qupv3_wrap0_s1_clk_src", 417 + .parent_names = gcc_parent_names_0, 418 + .num_parents = 4, 419 + .ops = &clk_rcg2_shared_ops, 411 420 }; 412 421 413 422 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = { ··· 425 416 .hid_width = 5, 426 417 .parent_map = gcc_parent_map_0, 427 418 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 428 - .clkr.hw.init = &(struct clk_init_data){ 429 - .name = "gcc_qupv3_wrap0_s1_clk_src", 430 - .parent_names = gcc_parent_names_0, 431 - .num_parents = 4, 432 - .ops = &clk_rcg2_shared_ops, 433 - }, 419 + .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_init, 420 + }; 421 + 422 + static struct clk_init_data gcc_qupv3_wrap0_s2_clk_init = { 423 + .name = "gcc_qupv3_wrap0_s2_clk_src", 424 + .parent_names = gcc_parent_names_0, 425 + .num_parents = 4, 426 + .ops = &clk_rcg2_shared_ops, 434 427 }; 435 428 436 429 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = { ··· 441 430 .hid_width = 5, 442 431 .parent_map = gcc_parent_map_0, 443 432 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 444 - .clkr.hw.init = &(struct clk_init_data){ 445 - .name = "gcc_qupv3_wrap0_s2_clk_src", 446 - .parent_names = gcc_parent_names_0, 447 - .num_parents = 4, 448 - .ops = &clk_rcg2_shared_ops, 449 - }, 433 + .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_init, 434 + }; 435 + 436 + static struct clk_init_data gcc_qupv3_wrap0_s3_clk_init = { 437 + .name = "gcc_qupv3_wrap0_s3_clk_src", 438 + .parent_names = gcc_parent_names_0, 439 + .num_parents = 4, 440 + .ops = &clk_rcg2_shared_ops, 450 441 }; 451 442 452 443 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = { ··· 457 444 .hid_width = 5, 458 445 .parent_map = gcc_parent_map_0, 459 446 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 460 - .clkr.hw.init = &(struct clk_init_data){ 461 - .name = "gcc_qupv3_wrap0_s3_clk_src", 462 - .parent_names = gcc_parent_names_0, 463 - .num_parents = 4, 464 - .ops = &clk_rcg2_shared_ops, 465 - }, 447 + .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_init, 448 + }; 449 + 450 + static struct clk_init_data gcc_qupv3_wrap0_s4_clk_init = { 451 + .name = "gcc_qupv3_wrap0_s4_clk_src", 452 + .parent_names = gcc_parent_names_0, 453 + .num_parents = 4, 454 + .ops = &clk_rcg2_shared_ops, 466 455 }; 467 456 468 457 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = { ··· 473 458 .hid_width = 5, 474 459 .parent_map = gcc_parent_map_0, 475 460 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 476 - .clkr.hw.init = &(struct clk_init_data){ 477 - .name = "gcc_qupv3_wrap0_s4_clk_src", 478 - .parent_names = gcc_parent_names_0, 479 - .num_parents = 4, 480 - .ops = &clk_rcg2_shared_ops, 481 - }, 461 + .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_init, 462 + }; 463 + 464 + static struct clk_init_data gcc_qupv3_wrap0_s5_clk_init = { 465 + .name = "gcc_qupv3_wrap0_s5_clk_src", 466 + .parent_names = gcc_parent_names_0, 467 + .num_parents = 4, 468 + .ops = &clk_rcg2_shared_ops, 482 469 }; 483 470 484 471 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = { ··· 489 472 .hid_width = 5, 490 473 .parent_map = gcc_parent_map_0, 491 474 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 492 - .clkr.hw.init = &(struct clk_init_data){ 493 - .name = "gcc_qupv3_wrap0_s5_clk_src", 494 - .parent_names = gcc_parent_names_0, 495 - .num_parents = 4, 496 - .ops = &clk_rcg2_shared_ops, 497 - }, 475 + .clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_init, 476 + }; 477 + 478 + static struct clk_init_data gcc_qupv3_wrap0_s6_clk_init = { 479 + .name = "gcc_qupv3_wrap0_s6_clk_src", 480 + .parent_names = gcc_parent_names_0, 481 + .num_parents = 4, 482 + .ops = &clk_rcg2_shared_ops, 498 483 }; 499 484 500 485 static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = { ··· 505 486 .hid_width = 5, 506 487 .parent_map = gcc_parent_map_0, 507 488 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 508 - .clkr.hw.init = &(struct clk_init_data){ 509 - .name = "gcc_qupv3_wrap0_s6_clk_src", 510 - .parent_names = gcc_parent_names_0, 511 - .num_parents = 4, 512 - .ops = &clk_rcg2_shared_ops, 513 - }, 489 + .clkr.hw.init = &gcc_qupv3_wrap0_s6_clk_init, 490 + }; 491 + 492 + static struct clk_init_data gcc_qupv3_wrap0_s7_clk_init = { 493 + .name = "gcc_qupv3_wrap0_s7_clk_src", 494 + .parent_names = gcc_parent_names_0, 495 + .num_parents = 4, 496 + .ops = &clk_rcg2_shared_ops, 514 497 }; 515 498 516 499 static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = { ··· 521 500 .hid_width = 5, 522 501 .parent_map = gcc_parent_map_0, 523 502 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 524 - .clkr.hw.init = &(struct clk_init_data){ 525 - .name = "gcc_qupv3_wrap0_s7_clk_src", 526 - .parent_names = gcc_parent_names_0, 527 - .num_parents = 4, 528 - .ops = &clk_rcg2_shared_ops, 529 - }, 503 + .clkr.hw.init = &gcc_qupv3_wrap0_s7_clk_init, 504 + }; 505 + 506 + static struct clk_init_data gcc_qupv3_wrap1_s0_clk_init = { 507 + .name = "gcc_qupv3_wrap1_s0_clk_src", 508 + .parent_names = gcc_parent_names_0, 509 + .num_parents = 4, 510 + .ops = &clk_rcg2_shared_ops, 530 511 }; 531 512 532 513 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = { ··· 537 514 .hid_width = 5, 538 515 .parent_map = gcc_parent_map_0, 539 516 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 540 - .clkr.hw.init = &(struct clk_init_data){ 541 - .name = "gcc_qupv3_wrap1_s0_clk_src", 542 - .parent_names = gcc_parent_names_0, 543 - .num_parents = 4, 544 - .ops = &clk_rcg2_shared_ops, 545 - }, 517 + .clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_init, 518 + }; 519 + 520 + static struct clk_init_data gcc_qupv3_wrap1_s1_clk_init = { 521 + .name = "gcc_qupv3_wrap1_s1_clk_src", 522 + .parent_names = gcc_parent_names_0, 523 + .num_parents = 4, 524 + .ops = &clk_rcg2_shared_ops, 546 525 }; 547 526 548 527 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = { ··· 553 528 .hid_width = 5, 554 529 .parent_map = gcc_parent_map_0, 555 530 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 556 - .clkr.hw.init = &(struct clk_init_data){ 557 - .name = "gcc_qupv3_wrap1_s1_clk_src", 558 - .parent_names = gcc_parent_names_0, 559 - .num_parents = 4, 560 - .ops = &clk_rcg2_shared_ops, 561 - }, 531 + .clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_init, 532 + }; 533 + 534 + static struct clk_init_data gcc_qupv3_wrap1_s2_clk_init = { 535 + .name = "gcc_qupv3_wrap1_s2_clk_src", 536 + .parent_names = gcc_parent_names_0, 537 + .num_parents = 4, 538 + .ops = &clk_rcg2_shared_ops, 562 539 }; 563 540 564 541 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = { ··· 569 542 .hid_width = 5, 570 543 .parent_map = gcc_parent_map_0, 571 544 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 572 - .clkr.hw.init = &(struct clk_init_data){ 573 - .name = "gcc_qupv3_wrap1_s2_clk_src", 574 - .parent_names = gcc_parent_names_0, 575 - .num_parents = 4, 576 - .ops = &clk_rcg2_shared_ops, 577 - }, 545 + .clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_init, 546 + }; 547 + 548 + static struct clk_init_data gcc_qupv3_wrap1_s3_clk_init = { 549 + .name = "gcc_qupv3_wrap1_s3_clk_src", 550 + .parent_names = gcc_parent_names_0, 551 + .num_parents = 4, 552 + .ops = &clk_rcg2_shared_ops, 578 553 }; 579 554 580 555 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = { ··· 585 556 .hid_width = 5, 586 557 .parent_map = gcc_parent_map_0, 587 558 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 588 - .clkr.hw.init = &(struct clk_init_data){ 589 - .name = "gcc_qupv3_wrap1_s3_clk_src", 590 - .parent_names = gcc_parent_names_0, 591 - .num_parents = 4, 592 - .ops = &clk_rcg2_shared_ops, 593 - }, 559 + .clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_init, 560 + }; 561 + 562 + static struct clk_init_data gcc_qupv3_wrap1_s4_clk_init = { 563 + .name = "gcc_qupv3_wrap1_s4_clk_src", 564 + .parent_names = gcc_parent_names_0, 565 + .num_parents = 4, 566 + .ops = &clk_rcg2_shared_ops, 594 567 }; 595 568 596 569 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = { ··· 601 570 .hid_width = 5, 602 571 .parent_map = gcc_parent_map_0, 603 572 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 604 - .clkr.hw.init = &(struct clk_init_data){ 605 - .name = "gcc_qupv3_wrap1_s4_clk_src", 606 - .parent_names = gcc_parent_names_0, 607 - .num_parents = 4, 608 - .ops = &clk_rcg2_shared_ops, 609 - }, 573 + .clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_init, 574 + }; 575 + 576 + static struct clk_init_data gcc_qupv3_wrap1_s5_clk_init = { 577 + .name = "gcc_qupv3_wrap1_s5_clk_src", 578 + .parent_names = gcc_parent_names_0, 579 + .num_parents = 4, 580 + .ops = &clk_rcg2_shared_ops, 610 581 }; 611 582 612 583 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = { ··· 617 584 .hid_width = 5, 618 585 .parent_map = gcc_parent_map_0, 619 586 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 620 - .clkr.hw.init = &(struct clk_init_data){ 621 - .name = "gcc_qupv3_wrap1_s5_clk_src", 622 - .parent_names = gcc_parent_names_0, 623 - .num_parents = 4, 624 - .ops = &clk_rcg2_shared_ops, 625 - }, 587 + .clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_init, 588 + }; 589 + 590 + static struct clk_init_data gcc_qupv3_wrap1_s6_clk_init = { 591 + .name = "gcc_qupv3_wrap1_s6_clk_src", 592 + .parent_names = gcc_parent_names_0, 593 + .num_parents = 4, 594 + .ops = &clk_rcg2_shared_ops, 626 595 }; 627 596 628 597 static struct clk_rcg2 gcc_qupv3_wrap1_s6_clk_src = { ··· 633 598 .hid_width = 5, 634 599 .parent_map = gcc_parent_map_0, 635 600 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 636 - .clkr.hw.init = &(struct clk_init_data){ 637 - .name = "gcc_qupv3_wrap1_s6_clk_src", 638 - .parent_names = gcc_parent_names_0, 639 - .num_parents = 4, 640 - .ops = &clk_rcg2_shared_ops, 641 - }, 601 + .clkr.hw.init = &gcc_qupv3_wrap1_s6_clk_init, 602 + }; 603 + 604 + static struct clk_init_data gcc_qupv3_wrap1_s7_clk_init = { 605 + .name = "gcc_qupv3_wrap1_s7_clk_src", 606 + .parent_names = gcc_parent_names_0, 607 + .num_parents = 4, 608 + .ops = &clk_rcg2_shared_ops, 642 609 }; 643 610 644 611 static struct clk_rcg2 gcc_qupv3_wrap1_s7_clk_src = { ··· 649 612 .hid_width = 5, 650 613 .parent_map = gcc_parent_map_0, 651 614 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 652 - .clkr.hw.init = &(struct clk_init_data){ 653 - .name = "gcc_qupv3_wrap1_s7_clk_src", 654 - .parent_names = gcc_parent_names_0, 655 - .num_parents = 4, 656 - .ops = &clk_rcg2_shared_ops, 657 - }, 615 + .clkr.hw.init = &gcc_qupv3_wrap1_s7_clk_init, 658 616 }; 659 617 660 618 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = { ··· 3490 3458 }; 3491 3459 MODULE_DEVICE_TABLE(of, gcc_sdm845_match_table); 3492 3460 3461 + static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = { 3462 + DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk), 3463 + DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk), 3464 + DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk), 3465 + DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk), 3466 + DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk), 3467 + DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk), 3468 + DEFINE_RCG_DFS(gcc_qupv3_wrap0_s6_clk), 3469 + DEFINE_RCG_DFS(gcc_qupv3_wrap0_s7_clk), 3470 + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk), 3471 + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk), 3472 + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk), 3473 + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk), 3474 + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk), 3475 + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk), 3476 + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s6_clk), 3477 + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s7_clk), 3478 + }; 3479 + 3493 3480 static int gcc_sdm845_probe(struct platform_device *pdev) 3494 3481 { 3495 3482 struct regmap *regmap; 3483 + int ret; 3496 3484 3497 3485 regmap = qcom_cc_map(pdev, &gcc_sdm845_desc); 3498 3486 if (IS_ERR(regmap)) ··· 3521 3469 /* Disable the GPLL0 active input to MMSS and GPU via MISC registers */ 3522 3470 regmap_update_bits(regmap, 0x09ffc, 0x3, 0x3); 3523 3471 regmap_update_bits(regmap, 0x71028, 0x3, 0x3); 3472 + 3473 + ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks, 3474 + ARRAY_SIZE(gcc_dfs_clocks)); 3475 + if (ret) 3476 + return ret; 3524 3477 3525 3478 return qcom_cc_really_probe(pdev, &gcc_sdm845_desc, regmap); 3526 3479 }