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

drm/amd/powerplay: Return per DPM level clock

Add change to return per DPM level clock in DAL interface

Signed-off-by: Kenneth Feng <kenneth.feng@amd.com>
Reviewed-by: Evan Quan <evan.quan@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Kenneth Feng and committed by
Alex Deucher
7436854e 7f3f106e

+276 -96
+275 -95
drivers/gpu/drm/amd/powerplay/hwmgr/vega12_hwmgr.c
··· 483 483 dpm_state->hard_max_level = 0xff; 484 484 } 485 485 486 + static int vega12_get_number_dpm_level(struct pp_hwmgr *hwmgr, 487 + PPCLK_e clkID, uint32_t *num_dpm_level) 488 + { 489 + int result; 490 + /* 491 + * SMU expects the Clock ID to be in the top 16 bits. 492 + * Lower 16 bits specify the level however 0xFF is a 493 + * special argument the returns the total number of levels 494 + */ 495 + PP_ASSERT_WITH_CODE(smum_send_msg_to_smc_with_parameter(hwmgr, 496 + PPSMC_MSG_GetDpmFreqByIndex, (clkID << 16 | 0xFF)) == 0, 497 + "[GetNumberDpmLevel] Failed to get DPM levels from SMU for CLKID!", 498 + return -EINVAL); 499 + 500 + result = vega12_read_arg_from_smc(hwmgr, num_dpm_level); 501 + 502 + PP_ASSERT_WITH_CODE(*num_dpm_level < MAX_REGULAR_DPM_NUMBER, 503 + "[GetNumberDPMLevel] Number of DPM levels is greater than limit", 504 + return -EINVAL); 505 + 506 + PP_ASSERT_WITH_CODE(*num_dpm_level != 0, 507 + "[GetNumberDPMLevel] Number of CLK Levels is zero!", 508 + return -EINVAL); 509 + 510 + return result; 511 + } 512 + 513 + static int vega12_get_dpm_frequency_by_index(struct pp_hwmgr *hwmgr, 514 + PPCLK_e clkID, uint32_t index, uint32_t *clock) 515 + { 516 + int result; 517 + 518 + /* 519 + *SMU expects the Clock ID to be in the top 16 bits. 520 + *Lower 16 bits specify the level 521 + */ 522 + PP_ASSERT_WITH_CODE(smum_send_msg_to_smc_with_parameter(hwmgr, 523 + PPSMC_MSG_GetDpmFreqByIndex, (clkID << 16 | index)) == 0, 524 + "[GetDpmFrequencyByIndex] Failed to get dpm frequency from SMU!", 525 + return -EINVAL); 526 + 527 + result = vega12_read_arg_from_smc(hwmgr, clock); 528 + 529 + PP_ASSERT_WITH_CODE(*clock != 0, 530 + "[GetDPMFrequencyByIndex] Failed to get dpm frequency by index.!", 531 + return -EINVAL); 532 + 533 + return result; 534 + } 535 + 486 536 /* 487 537 * This function is to initialize all DPM state tables 488 538 * for SMU based on the dependency table. ··· 543 493 */ 544 494 static int vega12_setup_default_dpm_tables(struct pp_hwmgr *hwmgr) 545 495 { 496 + uint32_t num_levels, i, clock; 497 + 546 498 struct vega12_hwmgr *data = 547 499 (struct vega12_hwmgr *)(hwmgr->backend); 500 + 548 501 struct vega12_single_dpm_table *dpm_table; 549 502 550 503 memset(&data->dpm_table, 0, sizeof(data->dpm_table)); 551 504 552 - /* Initialize Sclk DPM table based on allow Sclk values */ 505 + /* Initialize Sclk DPM and SOC DPM table based on allow Sclk values */ 553 506 dpm_table = &(data->dpm_table.soc_table); 507 + 508 + PP_ASSERT_WITH_CODE(vega12_get_number_dpm_level(hwmgr, PPCLK_SOCCLK, 509 + &num_levels) == 0, 510 + "[SetupDefaultDPMTables] Failed to get DPM levels from SMU for SOCCLK!", 511 + return -EINVAL); 512 + 513 + dpm_table->count = num_levels; 514 + 515 + for (i = 0; i < num_levels; i++) { 516 + PP_ASSERT_WITH_CODE(vega12_get_dpm_frequency_by_index(hwmgr, 517 + PPCLK_SOCCLK, i, &clock) == 0, 518 + "[SetupDefaultDPMTables] Failed to get DPM levels from SMU for SOCCLK!", 519 + return -EINVAL); 520 + 521 + dpm_table->dpm_levels[i].value = clock; 522 + } 523 + 554 524 vega12_init_dpm_state(&(dpm_table->dpm_state)); 555 525 556 526 dpm_table = &(data->dpm_table.gfx_table); 557 - vega12_init_dpm_state(&(dpm_table->dpm_state)); 558 527 559 - /* Initialize Mclk DPM table based on allow Mclk values */ 528 + PP_ASSERT_WITH_CODE(vega12_get_number_dpm_level(hwmgr, PPCLK_GFXCLK, 529 + &num_levels) == 0, 530 + "[SetupDefaultDPMTables] Failed to get DPM levels from SMU for GFXCLK!", 531 + return -EINVAL); 532 + 533 + dpm_table->count = num_levels; 534 + for (i = 0; i < num_levels; i++) { 535 + PP_ASSERT_WITH_CODE(vega12_get_dpm_frequency_by_index(hwmgr, 536 + PPCLK_GFXCLK, i, &clock) == 0, 537 + "[SetupDefaultDPMTables] Failed to get DPM levels from SMU for GFXCLK!", 538 + return -EINVAL); 539 + 540 + dpm_table->dpm_levels[i].value = clock; 541 + } 542 + 543 + vega12_init_dpm_state(&(dpm_table->dpm_state)); 544 + /* Initialize Mclk DPM table based on allow Mclk values */ 560 545 dpm_table = &(data->dpm_table.mem_table); 546 + 547 + PP_ASSERT_WITH_CODE(vega12_get_number_dpm_level(hwmgr, PPCLK_UCLK, 548 + &num_levels) == 0, 549 + "[SetupDefaultDPMTables] Failed to get DPM levels from SMU for UCLK!", 550 + return -EINVAL); 551 + 552 + dpm_table->count = num_levels; 553 + 554 + for (i = 0; i < num_levels; i++) { 555 + PP_ASSERT_WITH_CODE(vega12_get_dpm_frequency_by_index(hwmgr, 556 + PPCLK_UCLK, i, &clock) == 0, 557 + "[SetupDefaultDPMTables] Failed to get DPM levels from SMU for UCLK!", 558 + return -EINVAL); 559 + 560 + dpm_table->dpm_levels[i].value = clock; 561 + } 562 + 561 563 vega12_init_dpm_state(&(dpm_table->dpm_state)); 562 564 563 565 dpm_table = &(data->dpm_table.eclk_table); 566 + 567 + PP_ASSERT_WITH_CODE(vega12_get_number_dpm_level(hwmgr, PPCLK_ECLK, 568 + &num_levels) == 0, 569 + "[SetupDefaultDPMTables] Failed to get DPM levels from SMU for ECLK!", 570 + return -EINVAL); 571 + 572 + dpm_table->count = num_levels; 573 + 574 + for (i = 0; i < num_levels; i++) { 575 + PP_ASSERT_WITH_CODE(vega12_get_dpm_frequency_by_index(hwmgr, 576 + PPCLK_ECLK, i, &clock) == 0, 577 + "[SetupDefaultDPMTables] Failed to get DPM levels from SMU for ECLK!", 578 + return -EINVAL); 579 + 580 + dpm_table->dpm_levels[i].value = clock; 581 + } 582 + 564 583 vega12_init_dpm_state(&(dpm_table->dpm_state)); 565 584 566 585 dpm_table = &(data->dpm_table.vclk_table); 586 + 587 + PP_ASSERT_WITH_CODE(vega12_get_number_dpm_level(hwmgr, PPCLK_VCLK, 588 + &num_levels) == 0, 589 + "[SetupDefaultDPMTables] Failed to get DPM levels from SMU for VCLK!", 590 + return -EINVAL); 591 + 592 + dpm_table->count = num_levels; 593 + 594 + for (i = 0; i < num_levels; i++) { 595 + PP_ASSERT_WITH_CODE(vega12_get_dpm_frequency_by_index(hwmgr, 596 + PPCLK_VCLK, i, &clock) == 0, 597 + "[SetupDefaultDPMTables] Failed to get DPM levels from SMU for VCLK!", 598 + return -EINVAL); 599 + 600 + dpm_table->dpm_levels[i].value = clock; 601 + } 602 + 567 603 vega12_init_dpm_state(&(dpm_table->dpm_state)); 568 604 569 605 dpm_table = &(data->dpm_table.dclk_table); 606 + 607 + PP_ASSERT_WITH_CODE(vega12_get_number_dpm_level(hwmgr, PPCLK_DCLK, 608 + &num_levels) == 0, 609 + "[SetupDefaultDPMTables] Failed to get DPM levels from SMU for DCLK!", 610 + return -EINVAL); 611 + 612 + dpm_table->count = num_levels; 613 + 614 + for (i = 0; i < num_levels; i++) { 615 + PP_ASSERT_WITH_CODE(vega12_get_dpm_frequency_by_index(hwmgr, 616 + PPCLK_DCLK, i, &clock) == 0, 617 + "[SetupDefaultDPMTables] Failed to get DPM levels from SMU for DCLK!", 618 + return -EINVAL); 619 + 620 + dpm_table->dpm_levels[i].value = clock; 621 + } 622 + 570 623 vega12_init_dpm_state(&(dpm_table->dpm_state)); 571 624 572 625 /* Assume there is no headless Vega12 for now */ 573 626 dpm_table = &(data->dpm_table.dcef_table); 627 + 628 + PP_ASSERT_WITH_CODE(vega12_get_number_dpm_level(hwmgr, 629 + PPCLK_DCEFCLK, &num_levels) == 0, 630 + "[SetupDefaultDPMTables] Failed to get DPM levels from SMU for DCEFCLK!", 631 + return -EINVAL); 632 + 633 + dpm_table->count = num_levels; 634 + 635 + for (i = 0; i < num_levels; i++) { 636 + PP_ASSERT_WITH_CODE(vega12_get_dpm_frequency_by_index(hwmgr, 637 + PPCLK_DCEFCLK, i, &clock) == 0, 638 + "[SetupDefaultDPMTables] Failed to get DPM levels from SMU for DCEFCLK!", 639 + return -EINVAL); 640 + 641 + dpm_table->dpm_levels[i].value = clock; 642 + } 643 + 574 644 vega12_init_dpm_state(&(dpm_table->dpm_state)); 575 645 576 646 dpm_table = &(data->dpm_table.pixel_table); 647 + 648 + PP_ASSERT_WITH_CODE(vega12_get_number_dpm_level(hwmgr, 649 + PPCLK_PIXCLK, &num_levels) == 0, 650 + "[SetupDefaultDPMTables] Failed to get DPM levels from SMU for PIXCLK!", 651 + return -EINVAL); 652 + 653 + dpm_table->count = num_levels; 654 + 655 + for (i = 0; i < num_levels; i++) { 656 + PP_ASSERT_WITH_CODE(vega12_get_dpm_frequency_by_index(hwmgr, 657 + PPCLK_PIXCLK, i, &clock) == 0, 658 + "[SetupDefaultDPMTables] Failed to get DPM levels from SMU for PIXCLK!", 659 + return -EINVAL); 660 + 661 + dpm_table->dpm_levels[i].value = clock; 662 + } 663 + 577 664 vega12_init_dpm_state(&(dpm_table->dpm_state)); 578 665 579 666 dpm_table = &(data->dpm_table.display_table); 667 + 668 + PP_ASSERT_WITH_CODE(vega12_get_number_dpm_level(hwmgr, 669 + PPCLK_DISPCLK, &num_levels) == 0, 670 + "[SetupDefaultDPMTables] Failed to get DPM levels from SMU for DISPCLK!", 671 + return -EINVAL); 672 + 673 + dpm_table->count = num_levels; 674 + 675 + for (i = 0; i < num_levels; i++) { 676 + PP_ASSERT_WITH_CODE(vega12_get_dpm_frequency_by_index(hwmgr, 677 + PPCLK_DISPCLK, i, &clock) == 0, 678 + "[SetupDefaultDPMTables] Failed to get DPM levels from SMU for DISPCLK!", 679 + return -EINVAL); 680 + 681 + dpm_table->dpm_levels[i].value = clock; 682 + } 683 + 580 684 vega12_init_dpm_state(&(dpm_table->dpm_state)); 581 685 582 686 dpm_table = &(data->dpm_table.phy_table); 687 + 688 + PP_ASSERT_WITH_CODE(vega12_get_number_dpm_level(hwmgr, 689 + PPCLK_PHYCLK, &num_levels) == 0, 690 + "[SetupDefaultDPMTables] Failed to get DPM levels from SMU for PHYCLK!", 691 + return -EINVAL); 692 + 693 + dpm_table->count = num_levels; 694 + 695 + for (i = 0; i < num_levels; i++) { 696 + PP_ASSERT_WITH_CODE(vega12_get_dpm_frequency_by_index(hwmgr, 697 + PPCLK_PHYCLK, i, &clock) == 0, 698 + "[SetupDefaultDPMTables] Failed to get DPM levels from SMU for PHYCLK!", 699 + return -EINVAL); 700 + 701 + dpm_table->dpm_levels[i].value = clock; 702 + } 703 + 583 704 vega12_init_dpm_state(&(dpm_table->dpm_state)); 584 705 585 706 /* save a copy of the default DPM table */ ··· 806 585 struct pp_atomfwctrl_bios_boot_up_values boot_up_values; 807 586 struct phm_ppt_v3_information *pptable_information = 808 587 (struct phm_ppt_v3_information *)hwmgr->pptable; 809 - 810 - result = vega12_setup_default_dpm_tables(hwmgr); 811 - PP_ASSERT_WITH_CODE(!result, 812 - "Failed to setup default DPM tables!", 813 - return result); 814 588 815 589 result = pp_atomfwctrl_get_vbios_bootup_values(hwmgr, &boot_up_values); 816 590 if (!result) { ··· 947 731 "Failed to power control set level!", 948 732 return result); 949 733 734 + result = vega12_setup_default_dpm_tables(hwmgr); 735 + PP_ASSERT_WITH_CODE(!result, 736 + "Failed to setup default DPM tables!", 737 + return result); 950 738 return result; 951 739 } 952 740 ··· 1853 1633 struct pp_clock_levels_with_latency *clocks) 1854 1634 { 1855 1635 struct vega12_hwmgr *data = (struct vega12_hwmgr *)(hwmgr->backend); 1636 + uint32_t ucount; 1856 1637 int i; 1857 - uint32_t min, max, increments; 1638 + struct vega12_single_dpm_table *dpm_table; 1858 1639 1859 1640 if (!data->smu_features[GNLD_DPM_GFXCLK].enabled) 1860 1641 return -1; 1861 1642 1862 - PP_ASSERT_WITH_CODE( 1863 - vega12_get_clock_ranges(hwmgr, &min, PPCLK_GFXCLK, false) == 0, 1864 - "[GetSclks]: fail to get min PPCLK_GFXCLK\n", 1865 - return -1); 1866 - PP_ASSERT_WITH_CODE( 1867 - vega12_get_clock_ranges(hwmgr, &max, PPCLK_GFXCLK, true) == 0, 1868 - "[GetSclks]: fail to get max PPCLK_GFXCLK\n", 1869 - return -1); 1643 + dpm_table = &(data->dpm_table.gfx_table); 1644 + ucount = (dpm_table->count > VG12_PSUEDO_NUM_GFXCLK_DPM_LEVELS) ? 1645 + VG12_PSUEDO_NUM_GFXCLK_DPM_LEVELS : dpm_table->count; 1870 1646 1871 - clocks->data[0].clocks_in_khz = min * 100; 1872 - increments = (max - min) / (VG12_PSUEDO_NUM_GFXCLK_DPM_LEVELS - 1); 1647 + for (i = 0; i < ucount; i++) { 1648 + clocks->data[i].clocks_in_khz = 1649 + dpm_table->dpm_levels[i].value * 100; 1873 1650 1874 - for (i = 1; i < (VG12_PSUEDO_NUM_GFXCLK_DPM_LEVELS - 1); i++) { 1875 - if ((min + (increments * i)) != 0) { 1876 - clocks->data[i].clocks_in_khz = 1877 - (min + increments * i) * 100; 1878 - clocks->data[i].latency_in_us = 0; 1879 - } 1651 + clocks->data[i].latency_in_us = 0; 1880 1652 } 1881 - clocks->data[i].clocks_in_khz = max * 100; 1882 - clocks->num_levels = i + 1; 1653 + 1654 + clocks->num_levels = ucount; 1883 1655 1884 1656 return 0; 1885 1657 } ··· 1886 1674 struct pp_clock_levels_with_latency *clocks) 1887 1675 { 1888 1676 struct vega12_hwmgr *data = (struct vega12_hwmgr *)(hwmgr->backend); 1889 - uint32_t min, max, increments; 1677 + uint32_t ucount; 1890 1678 int i; 1891 - 1679 + struct vega12_single_dpm_table *dpm_table; 1892 1680 if (!data->smu_features[GNLD_DPM_UCLK].enabled) 1893 1681 return -1; 1894 1682 1895 - PP_ASSERT_WITH_CODE( 1896 - vega12_get_clock_ranges(hwmgr, &min, PPCLK_UCLK, false) == 0, 1897 - "[GetMclks]: fail to get min PPCLK_UCLK\n", 1898 - return -1); 1899 - PP_ASSERT_WITH_CODE( 1900 - vega12_get_clock_ranges(hwmgr, &max, PPCLK_UCLK, true) == 0, 1901 - "[GetMclks]: fail to get max PPCLK_UCLK\n", 1902 - return -1); 1683 + dpm_table = &(data->dpm_table.mem_table); 1684 + ucount = (dpm_table->count > VG12_PSUEDO_NUM_UCLK_DPM_LEVELS) ? 1685 + VG12_PSUEDO_NUM_UCLK_DPM_LEVELS : dpm_table->count; 1903 1686 1904 - clocks->data[0].clocks_in_khz = min * 100; 1905 - clocks->data[0].latency_in_us = 1906 - data->mclk_latency_table.entries[0].latency = 1907 - vega12_get_mem_latency(hwmgr, min); 1687 + for (i = 0; i < ucount; i++) { 1688 + clocks->data[i].clocks_in_khz = 1689 + dpm_table->dpm_levels[i].value * 100; 1908 1690 1909 - increments = (max - min) / (VG12_PSUEDO_NUM_UCLK_DPM_LEVELS - 1); 1910 - 1911 - for (i = 1; i < (VG12_PSUEDO_NUM_UCLK_DPM_LEVELS - 1); i++) { 1912 - if ((min + (increments * i)) != 0) { 1913 - clocks->data[i].clocks_in_khz = 1914 - (min + (increments * i)) * 100; 1915 - clocks->data[i].latency_in_us = 1916 - data->mclk_latency_table.entries[i].latency = 1917 - vega12_get_mem_latency(hwmgr, min + increments * i); 1918 - } 1691 + clocks->data[i].latency_in_us = 1692 + data->mclk_latency_table.entries[i].latency = 1693 + vega12_get_mem_latency(hwmgr, dpm_table->dpm_levels[i].value); 1919 1694 } 1920 1695 1921 - clocks->data[i].clocks_in_khz = max * 100; 1922 - clocks->data[i].latency_in_us = 1923 - data->mclk_latency_table.entries[i].latency = 1924 - vega12_get_mem_latency(hwmgr, max); 1925 - 1926 - clocks->num_levels = data->mclk_latency_table.count = i + 1; 1696 + clocks->num_levels = data->mclk_latency_table.count = ucount; 1927 1697 1928 1698 return 0; 1929 1699 } ··· 1914 1720 struct pp_clock_levels_with_latency *clocks) 1915 1721 { 1916 1722 struct vega12_hwmgr *data = (struct vega12_hwmgr *)(hwmgr->backend); 1723 + uint32_t ucount; 1917 1724 int i; 1918 - uint32_t min, max, increments; 1725 + struct vega12_single_dpm_table *dpm_table; 1919 1726 1920 1727 if (!data->smu_features[GNLD_DPM_DCEFCLK].enabled) 1921 1728 return -1; 1922 1729 1923 - PP_ASSERT_WITH_CODE( 1924 - vega12_get_clock_ranges(hwmgr, &min, PPCLK_DCEFCLK, false) == 0, 1925 - "[GetDcfclocks]: fail to get min PPCLK_DCEFCLK\n", 1926 - return -1); 1927 - PP_ASSERT_WITH_CODE( 1928 - vega12_get_clock_ranges(hwmgr, &max, PPCLK_DCEFCLK, true) == 0, 1929 - "[GetDcfclocks]: fail to get max PPCLK_DCEFCLK\n", 1930 - return -1); 1931 1730 1932 - clocks->data[0].clocks_in_khz = min * 100; 1933 - increments = (max - min) / (VG12_PSUEDO_NUM_DCEFCLK_DPM_LEVELS - 1); 1731 + dpm_table = &(data->dpm_table.dcef_table); 1732 + ucount = (dpm_table->count > VG12_PSUEDO_NUM_DCEFCLK_DPM_LEVELS) ? 1733 + VG12_PSUEDO_NUM_DCEFCLK_DPM_LEVELS : dpm_table->count; 1934 1734 1935 - for (i = 1; i < (VG12_PSUEDO_NUM_DCEFCLK_DPM_LEVELS - 1); i++) { 1936 - if ((min + (increments * i)) != 0) { 1937 - clocks->data[i].clocks_in_khz = 1938 - (min + increments * i) * 100; 1939 - clocks->data[i].latency_in_us = 0; 1940 - } 1735 + for (i = 0; i < ucount; i++) { 1736 + clocks->data[i].clocks_in_khz = 1737 + dpm_table->dpm_levels[i].value * 100; 1738 + 1739 + clocks->data[i].latency_in_us = 0; 1941 1740 } 1942 - clocks->data[i].clocks_in_khz = max * 100; 1943 - clocks->num_levels = i + 1; 1741 + 1742 + clocks->num_levels = ucount; 1944 1743 1945 1744 return 0; 1946 1745 } ··· 1942 1755 struct pp_clock_levels_with_latency *clocks) 1943 1756 { 1944 1757 struct vega12_hwmgr *data = (struct vega12_hwmgr *)(hwmgr->backend); 1758 + uint32_t ucount; 1945 1759 int i; 1946 - uint32_t min, max, increments; 1760 + struct vega12_single_dpm_table *dpm_table; 1947 1761 1948 1762 if (!data->smu_features[GNLD_DPM_SOCCLK].enabled) 1949 1763 return -1; 1950 1764 1951 - PP_ASSERT_WITH_CODE( 1952 - vega12_get_clock_ranges(hwmgr, &min, PPCLK_SOCCLK, false) == 0, 1953 - "[GetSocclks]: fail to get min PPCLK_SOCCLK\n", 1954 - return -1); 1955 - PP_ASSERT_WITH_CODE( 1956 - vega12_get_clock_ranges(hwmgr, &max, PPCLK_SOCCLK, true) == 0, 1957 - "[GetSocclks]: fail to get max PPCLK_SOCCLK\n", 1958 - return -1); 1959 1765 1960 - clocks->data[0].clocks_in_khz = min * 100; 1961 - increments = (max - min) / (VG12_PSUEDO_NUM_SOCCLK_DPM_LEVELS - 1); 1766 + dpm_table = &(data->dpm_table.soc_table); 1767 + ucount = (dpm_table->count > VG12_PSUEDO_NUM_SOCCLK_DPM_LEVELS) ? 1768 + VG12_PSUEDO_NUM_SOCCLK_DPM_LEVELS : dpm_table->count; 1962 1769 1963 - for (i = 1; i < (VG12_PSUEDO_NUM_SOCCLK_DPM_LEVELS - 1); i++) { 1964 - if ((min + (increments * i)) != 0) { 1965 - clocks->data[i].clocks_in_khz = 1966 - (min + increments * i) * 100; 1967 - clocks->data[i].latency_in_us = 0; 1968 - } 1770 + for (i = 0; i < ucount; i++) { 1771 + clocks->data[i].clocks_in_khz = 1772 + dpm_table->dpm_levels[i].value * 100; 1773 + 1774 + clocks->data[i].latency_in_us = 0; 1969 1775 } 1970 1776 1971 - clocks->data[i].clocks_in_khz = max * 100; 1972 - clocks->num_levels = i + 1; 1777 + clocks->num_levels = ucount; 1973 1778 1974 1779 return 0; 1975 1780 ··· 2552 2373 2553 2374 return 0; 2554 2375 } 2376 + 2555 2377 2556 2378 static const struct pp_hwmgr_func vega12_hwmgr_funcs = { 2557 2379 .backend_init = vega12_hwmgr_backend_init,
+1 -1
drivers/gpu/drm/amd/powerplay/hwmgr/vega12_hwmgr.h
··· 124 124 }; 125 125 126 126 #define VEGA12_MAX_DEEPSLEEP_DIVIDER_ID 5 127 - #define MAX_REGULAR_DPM_NUMBER 8 127 + #define MAX_REGULAR_DPM_NUMBER 16 128 128 #define MAX_PCIE_CONF 2 129 129 #define VEGA12_MINIMUM_ENGINE_CLOCK 2500 130 130