.. | .. |
---|
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 | { |
---|