| .. | .. |
|---|
| 1 | 1 | // SPDX-License-Identifier: GPL-2.0 |
|---|
| 2 | 2 | /* |
|---|
| 3 | | - * Copyright (c) 2018, The Linux Foundation. All rights reserved. |
|---|
| 3 | + * Copyright (c) 2018, 2020, The Linux Foundation. All rights reserved. |
|---|
| 4 | 4 | */ |
|---|
| 5 | 5 | |
|---|
| 6 | 6 | #include <linux/kernel.h> |
|---|
| .. | .. |
|---|
| 96 | 96 | |
|---|
| 97 | 97 | static const char * const gcc_parent_names_4[] = { |
|---|
| 98 | 98 | "bi_tcxo", |
|---|
| 99 | | - "core_bi_pll_test_se", |
|---|
| 100 | | -}; |
|---|
| 101 | | - |
|---|
| 102 | | -static const struct parent_map gcc_parent_map_5[] = { |
|---|
| 103 | | - { P_BI_TCXO, 0 }, |
|---|
| 104 | | - { P_GPLL0_OUT_MAIN, 1 }, |
|---|
| 105 | | - { P_GPLL4_OUT_MAIN, 5 }, |
|---|
| 106 | | - { P_GPLL0_OUT_EVEN, 6 }, |
|---|
| 107 | | - { P_CORE_BI_PLL_TEST_SE, 7 }, |
|---|
| 108 | | -}; |
|---|
| 109 | | - |
|---|
| 110 | | -static const char * const gcc_parent_names_5[] = { |
|---|
| 111 | | - "bi_tcxo", |
|---|
| 112 | | - "gpll0", |
|---|
| 113 | | - "gpll4", |
|---|
| 114 | | - "gpll0_out_even", |
|---|
| 115 | 99 | "core_bi_pll_test_se", |
|---|
| 116 | 100 | }; |
|---|
| 117 | 101 | |
|---|
| .. | .. |
|---|
| 362 | 346 | }, |
|---|
| 363 | 347 | }; |
|---|
| 364 | 348 | |
|---|
| 349 | +static const struct freq_tbl ftbl_gcc_qspi_core_clk_src[] = { |
|---|
| 350 | + F(19200000, P_BI_TCXO, 1, 0, 0), |
|---|
| 351 | + F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0), |
|---|
| 352 | + F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0), |
|---|
| 353 | + F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0), |
|---|
| 354 | + { } |
|---|
| 355 | +}; |
|---|
| 356 | + |
|---|
| 357 | +static struct clk_rcg2 gcc_qspi_core_clk_src = { |
|---|
| 358 | + .cmd_rcgr = 0x4b008, |
|---|
| 359 | + .mnd_width = 0, |
|---|
| 360 | + .hid_width = 5, |
|---|
| 361 | + .parent_map = gcc_parent_map_0, |
|---|
| 362 | + .freq_tbl = ftbl_gcc_qspi_core_clk_src, |
|---|
| 363 | + .clkr.hw.init = &(struct clk_init_data){ |
|---|
| 364 | + .name = "gcc_qspi_core_clk_src", |
|---|
| 365 | + .parent_names = gcc_parent_names_0, |
|---|
| 366 | + .num_parents = 4, |
|---|
| 367 | + .ops = &clk_rcg2_floor_ops, |
|---|
| 368 | + }, |
|---|
| 369 | +}; |
|---|
| 370 | + |
|---|
| 365 | 371 | static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = { |
|---|
| 366 | 372 | F(9600000, P_BI_TCXO, 2, 0, 0), |
|---|
| 367 | 373 | F(19200000, P_BI_TCXO, 1, 0, 0), |
|---|
| .. | .. |
|---|
| 402 | 408 | { } |
|---|
| 403 | 409 | }; |
|---|
| 404 | 410 | |
|---|
| 411 | +static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = { |
|---|
| 412 | + .name = "gcc_qupv3_wrap0_s0_clk_src", |
|---|
| 413 | + .parent_names = gcc_parent_names_0, |
|---|
| 414 | + .num_parents = 4, |
|---|
| 415 | + .ops = &clk_rcg2_shared_ops, |
|---|
| 416 | +}; |
|---|
| 417 | + |
|---|
| 405 | 418 | static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = { |
|---|
| 406 | 419 | .cmd_rcgr = 0x17034, |
|---|
| 407 | 420 | .mnd_width = 16, |
|---|
| 408 | 421 | .hid_width = 5, |
|---|
| 409 | 422 | .parent_map = gcc_parent_map_0, |
|---|
| 410 | 423 | .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, |
|---|
| 411 | | - .clkr.hw.init = &(struct clk_init_data){ |
|---|
| 412 | | - .name = "gcc_qupv3_wrap0_s0_clk_src", |
|---|
| 413 | | - .parent_names = gcc_parent_names_0, |
|---|
| 414 | | - .num_parents = 4, |
|---|
| 415 | | - .ops = &clk_rcg2_shared_ops, |
|---|
| 416 | | - }, |
|---|
| 424 | + .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init, |
|---|
| 425 | +}; |
|---|
| 426 | + |
|---|
| 427 | +static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = { |
|---|
| 428 | + .name = "gcc_qupv3_wrap0_s1_clk_src", |
|---|
| 429 | + .parent_names = gcc_parent_names_0, |
|---|
| 430 | + .num_parents = 4, |
|---|
| 431 | + .ops = &clk_rcg2_shared_ops, |
|---|
| 417 | 432 | }; |
|---|
| 418 | 433 | |
|---|
| 419 | 434 | static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = { |
|---|
| .. | .. |
|---|
| 422 | 437 | .hid_width = 5, |
|---|
| 423 | 438 | .parent_map = gcc_parent_map_0, |
|---|
| 424 | 439 | .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, |
|---|
| 425 | | - .clkr.hw.init = &(struct clk_init_data){ |
|---|
| 426 | | - .name = "gcc_qupv3_wrap0_s1_clk_src", |
|---|
| 427 | | - .parent_names = gcc_parent_names_0, |
|---|
| 428 | | - .num_parents = 4, |
|---|
| 429 | | - .ops = &clk_rcg2_shared_ops, |
|---|
| 430 | | - }, |
|---|
| 440 | + .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init, |
|---|
| 441 | +}; |
|---|
| 442 | + |
|---|
| 443 | +static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = { |
|---|
| 444 | + .name = "gcc_qupv3_wrap0_s2_clk_src", |
|---|
| 445 | + .parent_names = gcc_parent_names_0, |
|---|
| 446 | + .num_parents = 4, |
|---|
| 447 | + .ops = &clk_rcg2_shared_ops, |
|---|
| 431 | 448 | }; |
|---|
| 432 | 449 | |
|---|
| 433 | 450 | static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = { |
|---|
| .. | .. |
|---|
| 436 | 453 | .hid_width = 5, |
|---|
| 437 | 454 | .parent_map = gcc_parent_map_0, |
|---|
| 438 | 455 | .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, |
|---|
| 439 | | - .clkr.hw.init = &(struct clk_init_data){ |
|---|
| 440 | | - .name = "gcc_qupv3_wrap0_s2_clk_src", |
|---|
| 441 | | - .parent_names = gcc_parent_names_0, |
|---|
| 442 | | - .num_parents = 4, |
|---|
| 443 | | - .ops = &clk_rcg2_shared_ops, |
|---|
| 444 | | - }, |
|---|
| 456 | + .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init, |
|---|
| 457 | +}; |
|---|
| 458 | + |
|---|
| 459 | +static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = { |
|---|
| 460 | + .name = "gcc_qupv3_wrap0_s3_clk_src", |
|---|
| 461 | + .parent_names = gcc_parent_names_0, |
|---|
| 462 | + .num_parents = 4, |
|---|
| 463 | + .ops = &clk_rcg2_shared_ops, |
|---|
| 445 | 464 | }; |
|---|
| 446 | 465 | |
|---|
| 447 | 466 | static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = { |
|---|
| .. | .. |
|---|
| 450 | 469 | .hid_width = 5, |
|---|
| 451 | 470 | .parent_map = gcc_parent_map_0, |
|---|
| 452 | 471 | .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, |
|---|
| 453 | | - .clkr.hw.init = &(struct clk_init_data){ |
|---|
| 454 | | - .name = "gcc_qupv3_wrap0_s3_clk_src", |
|---|
| 455 | | - .parent_names = gcc_parent_names_0, |
|---|
| 456 | | - .num_parents = 4, |
|---|
| 457 | | - .ops = &clk_rcg2_shared_ops, |
|---|
| 458 | | - }, |
|---|
| 472 | + .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init, |
|---|
| 473 | +}; |
|---|
| 474 | + |
|---|
| 475 | +static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = { |
|---|
| 476 | + .name = "gcc_qupv3_wrap0_s4_clk_src", |
|---|
| 477 | + .parent_names = gcc_parent_names_0, |
|---|
| 478 | + .num_parents = 4, |
|---|
| 479 | + .ops = &clk_rcg2_shared_ops, |
|---|
| 459 | 480 | }; |
|---|
| 460 | 481 | |
|---|
| 461 | 482 | static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = { |
|---|
| .. | .. |
|---|
| 464 | 485 | .hid_width = 5, |
|---|
| 465 | 486 | .parent_map = gcc_parent_map_0, |
|---|
| 466 | 487 | .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, |
|---|
| 467 | | - .clkr.hw.init = &(struct clk_init_data){ |
|---|
| 468 | | - .name = "gcc_qupv3_wrap0_s4_clk_src", |
|---|
| 469 | | - .parent_names = gcc_parent_names_0, |
|---|
| 470 | | - .num_parents = 4, |
|---|
| 471 | | - .ops = &clk_rcg2_shared_ops, |
|---|
| 472 | | - }, |
|---|
| 488 | + .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init, |
|---|
| 489 | +}; |
|---|
| 490 | + |
|---|
| 491 | +static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = { |
|---|
| 492 | + .name = "gcc_qupv3_wrap0_s5_clk_src", |
|---|
| 493 | + .parent_names = gcc_parent_names_0, |
|---|
| 494 | + .num_parents = 4, |
|---|
| 495 | + .ops = &clk_rcg2_shared_ops, |
|---|
| 473 | 496 | }; |
|---|
| 474 | 497 | |
|---|
| 475 | 498 | static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = { |
|---|
| .. | .. |
|---|
| 478 | 501 | .hid_width = 5, |
|---|
| 479 | 502 | .parent_map = gcc_parent_map_0, |
|---|
| 480 | 503 | .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, |
|---|
| 481 | | - .clkr.hw.init = &(struct clk_init_data){ |
|---|
| 482 | | - .name = "gcc_qupv3_wrap0_s5_clk_src", |
|---|
| 483 | | - .parent_names = gcc_parent_names_0, |
|---|
| 484 | | - .num_parents = 4, |
|---|
| 485 | | - .ops = &clk_rcg2_shared_ops, |
|---|
| 486 | | - }, |
|---|
| 504 | + .clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init, |
|---|
| 505 | +}; |
|---|
| 506 | + |
|---|
| 507 | +static struct clk_init_data gcc_qupv3_wrap0_s6_clk_src_init = { |
|---|
| 508 | + .name = "gcc_qupv3_wrap0_s6_clk_src", |
|---|
| 509 | + .parent_names = gcc_parent_names_0, |
|---|
| 510 | + .num_parents = 4, |
|---|
| 511 | + .ops = &clk_rcg2_shared_ops, |
|---|
| 487 | 512 | }; |
|---|
| 488 | 513 | |
|---|
| 489 | 514 | static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = { |
|---|
| .. | .. |
|---|
| 492 | 517 | .hid_width = 5, |
|---|
| 493 | 518 | .parent_map = gcc_parent_map_0, |
|---|
| 494 | 519 | .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, |
|---|
| 495 | | - .clkr.hw.init = &(struct clk_init_data){ |
|---|
| 496 | | - .name = "gcc_qupv3_wrap0_s6_clk_src", |
|---|
| 497 | | - .parent_names = gcc_parent_names_0, |
|---|
| 498 | | - .num_parents = 4, |
|---|
| 499 | | - .ops = &clk_rcg2_shared_ops, |
|---|
| 500 | | - }, |
|---|
| 520 | + .clkr.hw.init = &gcc_qupv3_wrap0_s6_clk_src_init, |
|---|
| 521 | +}; |
|---|
| 522 | + |
|---|
| 523 | +static struct clk_init_data gcc_qupv3_wrap0_s7_clk_src_init = { |
|---|
| 524 | + .name = "gcc_qupv3_wrap0_s7_clk_src", |
|---|
| 525 | + .parent_names = gcc_parent_names_0, |
|---|
| 526 | + .num_parents = 4, |
|---|
| 527 | + .ops = &clk_rcg2_shared_ops, |
|---|
| 501 | 528 | }; |
|---|
| 502 | 529 | |
|---|
| 503 | 530 | static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = { |
|---|
| .. | .. |
|---|
| 506 | 533 | .hid_width = 5, |
|---|
| 507 | 534 | .parent_map = gcc_parent_map_0, |
|---|
| 508 | 535 | .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, |
|---|
| 509 | | - .clkr.hw.init = &(struct clk_init_data){ |
|---|
| 510 | | - .name = "gcc_qupv3_wrap0_s7_clk_src", |
|---|
| 511 | | - .parent_names = gcc_parent_names_0, |
|---|
| 512 | | - .num_parents = 4, |
|---|
| 513 | | - .ops = &clk_rcg2_shared_ops, |
|---|
| 514 | | - }, |
|---|
| 536 | + .clkr.hw.init = &gcc_qupv3_wrap0_s7_clk_src_init, |
|---|
| 537 | +}; |
|---|
| 538 | + |
|---|
| 539 | +static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = { |
|---|
| 540 | + .name = "gcc_qupv3_wrap1_s0_clk_src", |
|---|
| 541 | + .parent_names = gcc_parent_names_0, |
|---|
| 542 | + .num_parents = 4, |
|---|
| 543 | + .ops = &clk_rcg2_shared_ops, |
|---|
| 515 | 544 | }; |
|---|
| 516 | 545 | |
|---|
| 517 | 546 | static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = { |
|---|
| .. | .. |
|---|
| 520 | 549 | .hid_width = 5, |
|---|
| 521 | 550 | .parent_map = gcc_parent_map_0, |
|---|
| 522 | 551 | .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, |
|---|
| 523 | | - .clkr.hw.init = &(struct clk_init_data){ |
|---|
| 524 | | - .name = "gcc_qupv3_wrap1_s0_clk_src", |
|---|
| 525 | | - .parent_names = gcc_parent_names_0, |
|---|
| 526 | | - .num_parents = 4, |
|---|
| 527 | | - .ops = &clk_rcg2_shared_ops, |
|---|
| 528 | | - }, |
|---|
| 552 | + .clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init, |
|---|
| 553 | +}; |
|---|
| 554 | + |
|---|
| 555 | +static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = { |
|---|
| 556 | + .name = "gcc_qupv3_wrap1_s1_clk_src", |
|---|
| 557 | + .parent_names = gcc_parent_names_0, |
|---|
| 558 | + .num_parents = 4, |
|---|
| 559 | + .ops = &clk_rcg2_shared_ops, |
|---|
| 529 | 560 | }; |
|---|
| 530 | 561 | |
|---|
| 531 | 562 | static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = { |
|---|
| .. | .. |
|---|
| 534 | 565 | .hid_width = 5, |
|---|
| 535 | 566 | .parent_map = gcc_parent_map_0, |
|---|
| 536 | 567 | .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, |
|---|
| 537 | | - .clkr.hw.init = &(struct clk_init_data){ |
|---|
| 538 | | - .name = "gcc_qupv3_wrap1_s1_clk_src", |
|---|
| 539 | | - .parent_names = gcc_parent_names_0, |
|---|
| 540 | | - .num_parents = 4, |
|---|
| 541 | | - .ops = &clk_rcg2_shared_ops, |
|---|
| 542 | | - }, |
|---|
| 568 | + .clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init, |
|---|
| 569 | +}; |
|---|
| 570 | + |
|---|
| 571 | +static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = { |
|---|
| 572 | + .name = "gcc_qupv3_wrap1_s2_clk_src", |
|---|
| 573 | + .parent_names = gcc_parent_names_0, |
|---|
| 574 | + .num_parents = 4, |
|---|
| 575 | + .ops = &clk_rcg2_shared_ops, |
|---|
| 543 | 576 | }; |
|---|
| 544 | 577 | |
|---|
| 545 | 578 | static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = { |
|---|
| .. | .. |
|---|
| 548 | 581 | .hid_width = 5, |
|---|
| 549 | 582 | .parent_map = gcc_parent_map_0, |
|---|
| 550 | 583 | .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, |
|---|
| 551 | | - .clkr.hw.init = &(struct clk_init_data){ |
|---|
| 552 | | - .name = "gcc_qupv3_wrap1_s2_clk_src", |
|---|
| 553 | | - .parent_names = gcc_parent_names_0, |
|---|
| 554 | | - .num_parents = 4, |
|---|
| 555 | | - .ops = &clk_rcg2_shared_ops, |
|---|
| 556 | | - }, |
|---|
| 584 | + .clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init, |
|---|
| 585 | +}; |
|---|
| 586 | + |
|---|
| 587 | +static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = { |
|---|
| 588 | + .name = "gcc_qupv3_wrap1_s3_clk_src", |
|---|
| 589 | + .parent_names = gcc_parent_names_0, |
|---|
| 590 | + .num_parents = 4, |
|---|
| 591 | + .ops = &clk_rcg2_shared_ops, |
|---|
| 557 | 592 | }; |
|---|
| 558 | 593 | |
|---|
| 559 | 594 | static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = { |
|---|
| .. | .. |
|---|
| 562 | 597 | .hid_width = 5, |
|---|
| 563 | 598 | .parent_map = gcc_parent_map_0, |
|---|
| 564 | 599 | .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, |
|---|
| 565 | | - .clkr.hw.init = &(struct clk_init_data){ |
|---|
| 566 | | - .name = "gcc_qupv3_wrap1_s3_clk_src", |
|---|
| 567 | | - .parent_names = gcc_parent_names_0, |
|---|
| 568 | | - .num_parents = 4, |
|---|
| 569 | | - .ops = &clk_rcg2_shared_ops, |
|---|
| 570 | | - }, |
|---|
| 600 | + .clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init, |
|---|
| 601 | +}; |
|---|
| 602 | + |
|---|
| 603 | +static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = { |
|---|
| 604 | + .name = "gcc_qupv3_wrap1_s4_clk_src", |
|---|
| 605 | + .parent_names = gcc_parent_names_0, |
|---|
| 606 | + .num_parents = 4, |
|---|
| 607 | + .ops = &clk_rcg2_shared_ops, |
|---|
| 571 | 608 | }; |
|---|
| 572 | 609 | |
|---|
| 573 | 610 | static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = { |
|---|
| .. | .. |
|---|
| 576 | 613 | .hid_width = 5, |
|---|
| 577 | 614 | .parent_map = gcc_parent_map_0, |
|---|
| 578 | 615 | .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, |
|---|
| 579 | | - .clkr.hw.init = &(struct clk_init_data){ |
|---|
| 580 | | - .name = "gcc_qupv3_wrap1_s4_clk_src", |
|---|
| 581 | | - .parent_names = gcc_parent_names_0, |
|---|
| 582 | | - .num_parents = 4, |
|---|
| 583 | | - .ops = &clk_rcg2_shared_ops, |
|---|
| 584 | | - }, |
|---|
| 616 | + .clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init, |
|---|
| 617 | +}; |
|---|
| 618 | + |
|---|
| 619 | +static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = { |
|---|
| 620 | + .name = "gcc_qupv3_wrap1_s5_clk_src", |
|---|
| 621 | + .parent_names = gcc_parent_names_0, |
|---|
| 622 | + .num_parents = 4, |
|---|
| 623 | + .ops = &clk_rcg2_shared_ops, |
|---|
| 585 | 624 | }; |
|---|
| 586 | 625 | |
|---|
| 587 | 626 | static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = { |
|---|
| .. | .. |
|---|
| 590 | 629 | .hid_width = 5, |
|---|
| 591 | 630 | .parent_map = gcc_parent_map_0, |
|---|
| 592 | 631 | .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, |
|---|
| 593 | | - .clkr.hw.init = &(struct clk_init_data){ |
|---|
| 594 | | - .name = "gcc_qupv3_wrap1_s5_clk_src", |
|---|
| 595 | | - .parent_names = gcc_parent_names_0, |
|---|
| 596 | | - .num_parents = 4, |
|---|
| 597 | | - .ops = &clk_rcg2_shared_ops, |
|---|
| 598 | | - }, |
|---|
| 632 | + .clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init, |
|---|
| 633 | +}; |
|---|
| 634 | + |
|---|
| 635 | +static struct clk_init_data gcc_qupv3_wrap1_s6_clk_src_init = { |
|---|
| 636 | + .name = "gcc_qupv3_wrap1_s6_clk_src", |
|---|
| 637 | + .parent_names = gcc_parent_names_0, |
|---|
| 638 | + .num_parents = 4, |
|---|
| 639 | + .ops = &clk_rcg2_shared_ops, |
|---|
| 599 | 640 | }; |
|---|
| 600 | 641 | |
|---|
| 601 | 642 | static struct clk_rcg2 gcc_qupv3_wrap1_s6_clk_src = { |
|---|
| .. | .. |
|---|
| 604 | 645 | .hid_width = 5, |
|---|
| 605 | 646 | .parent_map = gcc_parent_map_0, |
|---|
| 606 | 647 | .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, |
|---|
| 607 | | - .clkr.hw.init = &(struct clk_init_data){ |
|---|
| 608 | | - .name = "gcc_qupv3_wrap1_s6_clk_src", |
|---|
| 609 | | - .parent_names = gcc_parent_names_0, |
|---|
| 610 | | - .num_parents = 4, |
|---|
| 611 | | - .ops = &clk_rcg2_shared_ops, |
|---|
| 612 | | - }, |
|---|
| 648 | + .clkr.hw.init = &gcc_qupv3_wrap1_s6_clk_src_init, |
|---|
| 649 | +}; |
|---|
| 650 | + |
|---|
| 651 | +static struct clk_init_data gcc_qupv3_wrap1_s7_clk_src_init = { |
|---|
| 652 | + .name = "gcc_qupv3_wrap1_s7_clk_src", |
|---|
| 653 | + .parent_names = gcc_parent_names_0, |
|---|
| 654 | + .num_parents = 4, |
|---|
| 655 | + .ops = &clk_rcg2_shared_ops, |
|---|
| 613 | 656 | }; |
|---|
| 614 | 657 | |
|---|
| 615 | 658 | static struct clk_rcg2 gcc_qupv3_wrap1_s7_clk_src = { |
|---|
| .. | .. |
|---|
| 618 | 661 | .hid_width = 5, |
|---|
| 619 | 662 | .parent_map = gcc_parent_map_0, |
|---|
| 620 | 663 | .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, |
|---|
| 621 | | - .clkr.hw.init = &(struct clk_init_data){ |
|---|
| 622 | | - .name = "gcc_qupv3_wrap1_s7_clk_src", |
|---|
| 623 | | - .parent_names = gcc_parent_names_0, |
|---|
| 624 | | - .num_parents = 4, |
|---|
| 625 | | - .ops = &clk_rcg2_shared_ops, |
|---|
| 626 | | - }, |
|---|
| 664 | + .clkr.hw.init = &gcc_qupv3_wrap1_s7_clk_src_init, |
|---|
| 627 | 665 | }; |
|---|
| 628 | 666 | |
|---|
| 629 | 667 | static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = { |
|---|
| .. | .. |
|---|
| 1306 | 1344 | "gpll0", |
|---|
| 1307 | 1345 | }, |
|---|
| 1308 | 1346 | .num_parents = 1, |
|---|
| 1309 | | - .ops = &clk_branch2_ops, |
|---|
| 1347 | + .ops = &clk_branch2_aon_ops, |
|---|
| 1310 | 1348 | }, |
|---|
| 1311 | 1349 | }, |
|---|
| 1312 | 1350 | }; |
|---|
| .. | .. |
|---|
| 1665 | 1703 | .enable_mask = BIT(4), |
|---|
| 1666 | 1704 | .hw.init = &(struct clk_init_data){ |
|---|
| 1667 | 1705 | .name = "gcc_pcie_0_pipe_clk", |
|---|
| 1706 | + .parent_names = (const char *[]){ "pcie_0_pipe_clk" }, |
|---|
| 1707 | + .num_parents = 1, |
|---|
| 1708 | + .flags = CLK_SET_RATE_PARENT, |
|---|
| 1668 | 1709 | .ops = &clk_branch2_ops, |
|---|
| 1669 | 1710 | }, |
|---|
| 1670 | 1711 | }, |
|---|
| .. | .. |
|---|
| 1764 | 1805 | .enable_mask = BIT(30), |
|---|
| 1765 | 1806 | .hw.init = &(struct clk_init_data){ |
|---|
| 1766 | 1807 | .name = "gcc_pcie_1_pipe_clk", |
|---|
| 1808 | + .parent_names = (const char *[]){ "pcie_1_pipe_clk" }, |
|---|
| 1809 | + .num_parents = 1, |
|---|
| 1767 | 1810 | .ops = &clk_branch2_ops, |
|---|
| 1768 | 1811 | }, |
|---|
| 1769 | 1812 | }, |
|---|
| .. | .. |
|---|
| 1934 | 1977 | .enable_mask = BIT(0), |
|---|
| 1935 | 1978 | .hw.init = &(struct clk_init_data){ |
|---|
| 1936 | 1979 | .name = "gcc_qmip_video_ahb_clk", |
|---|
| 1980 | + .ops = &clk_branch2_ops, |
|---|
| 1981 | + }, |
|---|
| 1982 | + }, |
|---|
| 1983 | +}; |
|---|
| 1984 | + |
|---|
| 1985 | +static struct clk_branch gcc_qspi_cnoc_periph_ahb_clk = { |
|---|
| 1986 | + .halt_reg = 0x4b000, |
|---|
| 1987 | + .halt_check = BRANCH_HALT, |
|---|
| 1988 | + .clkr = { |
|---|
| 1989 | + .enable_reg = 0x4b000, |
|---|
| 1990 | + .enable_mask = BIT(0), |
|---|
| 1991 | + .hw.init = &(struct clk_init_data){ |
|---|
| 1992 | + .name = "gcc_qspi_cnoc_periph_ahb_clk", |
|---|
| 1993 | + .ops = &clk_branch2_ops, |
|---|
| 1994 | + }, |
|---|
| 1995 | + }, |
|---|
| 1996 | +}; |
|---|
| 1997 | + |
|---|
| 1998 | +static struct clk_branch gcc_qspi_core_clk = { |
|---|
| 1999 | + .halt_reg = 0x4b004, |
|---|
| 2000 | + .halt_check = BRANCH_HALT, |
|---|
| 2001 | + .clkr = { |
|---|
| 2002 | + .enable_reg = 0x4b004, |
|---|
| 2003 | + .enable_mask = BIT(0), |
|---|
| 2004 | + .hw.init = &(struct clk_init_data){ |
|---|
| 2005 | + .name = "gcc_qspi_core_clk", |
|---|
| 2006 | + .parent_names = (const char *[]){ |
|---|
| 2007 | + "gcc_qspi_core_clk_src", |
|---|
| 2008 | + }, |
|---|
| 2009 | + .num_parents = 1, |
|---|
| 2010 | + .flags = CLK_SET_RATE_PARENT, |
|---|
| 1937 | 2011 | .ops = &clk_branch2_ops, |
|---|
| 1938 | 2012 | }, |
|---|
| 1939 | 2013 | }, |
|---|
| .. | .. |
|---|
| 3090 | 3164 | }, |
|---|
| 3091 | 3165 | }; |
|---|
| 3092 | 3166 | |
|---|
| 3167 | +/* TODO: Remove after DTS updated to protect these */ |
|---|
| 3168 | +#ifdef CONFIG_SDM_LPASSCC_845 |
|---|
| 3169 | +static struct clk_branch gcc_lpass_q6_axi_clk = { |
|---|
| 3170 | + .halt_reg = 0x47000, |
|---|
| 3171 | + .halt_check = BRANCH_HALT, |
|---|
| 3172 | + .clkr = { |
|---|
| 3173 | + .enable_reg = 0x47000, |
|---|
| 3174 | + .enable_mask = BIT(0), |
|---|
| 3175 | + .hw.init = &(struct clk_init_data){ |
|---|
| 3176 | + .name = "gcc_lpass_q6_axi_clk", |
|---|
| 3177 | + .flags = CLK_IS_CRITICAL, |
|---|
| 3178 | + .ops = &clk_branch2_ops, |
|---|
| 3179 | + }, |
|---|
| 3180 | + }, |
|---|
| 3181 | +}; |
|---|
| 3182 | + |
|---|
| 3183 | +static struct clk_branch gcc_lpass_sway_clk = { |
|---|
| 3184 | + .halt_reg = 0x47008, |
|---|
| 3185 | + .halt_check = BRANCH_HALT, |
|---|
| 3186 | + .clkr = { |
|---|
| 3187 | + .enable_reg = 0x47008, |
|---|
| 3188 | + .enable_mask = BIT(0), |
|---|
| 3189 | + .hw.init = &(struct clk_init_data){ |
|---|
| 3190 | + .name = "gcc_lpass_sway_clk", |
|---|
| 3191 | + .flags = CLK_IS_CRITICAL, |
|---|
| 3192 | + .ops = &clk_branch2_ops, |
|---|
| 3193 | + }, |
|---|
| 3194 | + }, |
|---|
| 3195 | +}; |
|---|
| 3196 | +#endif |
|---|
| 3197 | + |
|---|
| 3093 | 3198 | static struct gdsc pcie_0_gdsc = { |
|---|
| 3094 | 3199 | .gdscr = 0x6b004, |
|---|
| 3095 | 3200 | .pd = { |
|---|
| .. | .. |
|---|
| 3394 | 3499 | [GPLL4] = &gpll4.clkr, |
|---|
| 3395 | 3500 | [GCC_CPUSS_DVM_BUS_CLK] = &gcc_cpuss_dvm_bus_clk.clkr, |
|---|
| 3396 | 3501 | [GCC_CPUSS_GNOC_CLK] = &gcc_cpuss_gnoc_clk.clkr, |
|---|
| 3502 | + [GCC_QSPI_CORE_CLK_SRC] = &gcc_qspi_core_clk_src.clkr, |
|---|
| 3503 | + [GCC_QSPI_CORE_CLK] = &gcc_qspi_core_clk.clkr, |
|---|
| 3504 | + [GCC_QSPI_CNOC_PERIPH_AHB_CLK] = &gcc_qspi_cnoc_periph_ahb_clk.clkr, |
|---|
| 3505 | +#ifdef CONFIG_SDM_LPASSCC_845 |
|---|
| 3506 | + [GCC_LPASS_Q6_AXI_CLK] = &gcc_lpass_q6_axi_clk.clkr, |
|---|
| 3507 | + [GCC_LPASS_SWAY_CLK] = &gcc_lpass_sway_clk.clkr, |
|---|
| 3508 | +#endif |
|---|
| 3397 | 3509 | }; |
|---|
| 3398 | 3510 | |
|---|
| 3399 | 3511 | static const struct qcom_reset_map gcc_sdm845_resets[] = { |
|---|
| .. | .. |
|---|
| 3471 | 3583 | }; |
|---|
| 3472 | 3584 | MODULE_DEVICE_TABLE(of, gcc_sdm845_match_table); |
|---|
| 3473 | 3585 | |
|---|
| 3586 | +static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = { |
|---|
| 3587 | + DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src), |
|---|
| 3588 | + DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src), |
|---|
| 3589 | + DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src), |
|---|
| 3590 | + DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src), |
|---|
| 3591 | + DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src), |
|---|
| 3592 | + DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src), |
|---|
| 3593 | + DEFINE_RCG_DFS(gcc_qupv3_wrap0_s6_clk_src), |
|---|
| 3594 | + DEFINE_RCG_DFS(gcc_qupv3_wrap0_s7_clk_src), |
|---|
| 3595 | + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src), |
|---|
| 3596 | + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src), |
|---|
| 3597 | + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src), |
|---|
| 3598 | + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src), |
|---|
| 3599 | + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src), |
|---|
| 3600 | + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src), |
|---|
| 3601 | + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s6_clk_src), |
|---|
| 3602 | + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s7_clk_src), |
|---|
| 3603 | +}; |
|---|
| 3604 | + |
|---|
| 3474 | 3605 | static int gcc_sdm845_probe(struct platform_device *pdev) |
|---|
| 3475 | 3606 | { |
|---|
| 3476 | 3607 | struct regmap *regmap; |
|---|
| 3608 | + int ret; |
|---|
| 3477 | 3609 | |
|---|
| 3478 | 3610 | regmap = qcom_cc_map(pdev, &gcc_sdm845_desc); |
|---|
| 3479 | 3611 | if (IS_ERR(regmap)) |
|---|
| .. | .. |
|---|
| 3483 | 3615 | regmap_update_bits(regmap, 0x09ffc, 0x3, 0x3); |
|---|
| 3484 | 3616 | regmap_update_bits(regmap, 0x71028, 0x3, 0x3); |
|---|
| 3485 | 3617 | |
|---|
| 3618 | + ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks, |
|---|
| 3619 | + ARRAY_SIZE(gcc_dfs_clocks)); |
|---|
| 3620 | + if (ret) |
|---|
| 3621 | + return ret; |
|---|
| 3622 | + |
|---|
| 3486 | 3623 | return qcom_cc_really_probe(pdev, &gcc_sdm845_desc, regmap); |
|---|
| 3487 | 3624 | } |
|---|
| 3488 | 3625 | |
|---|
| .. | .. |
|---|
| 3491 | 3628 | .driver = { |
|---|
| 3492 | 3629 | .name = "gcc-sdm845", |
|---|
| 3493 | 3630 | .of_match_table = gcc_sdm845_match_table, |
|---|
| 3631 | + .sync_state = clk_sync_state, |
|---|
| 3494 | 3632 | }, |
|---|
| 3495 | 3633 | }; |
|---|
| 3496 | 3634 | |
|---|
| .. | .. |
|---|
| 3498 | 3636 | { |
|---|
| 3499 | 3637 | return platform_driver_register(&gcc_sdm845_driver); |
|---|
| 3500 | 3638 | } |
|---|
| 3501 | | -subsys_initcall(gcc_sdm845_init); |
|---|
| 3639 | +core_initcall(gcc_sdm845_init); |
|---|
| 3502 | 3640 | |
|---|
| 3503 | 3641 | static void __exit gcc_sdm845_exit(void) |
|---|
| 3504 | 3642 | { |
|---|