diff options
author | Evan Quan <evan.quan@amd.com> | 2018-10-24 00:57:56 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2018-10-25 15:04:03 -0400 |
commit | 3732eb0683c17113201cd29fdefd7a58b1acfa7f (patch) | |
tree | 62d481cb7fd4a90f7b83df4d35ffbc3b9613cbf4 /drivers/gpu/drm | |
parent | 7dc94969e165464896366fcb096f4be18ba56f44 (diff) |
drm/amd/powerplay: commonize the API for retrieving current clocks
So that it can be shared between all clocks.
Signed-off-by: Evan Quan <evan.quan@amd.com>
Reviewed-by: Feifei Xu<Feifei.Xu@amd.com>
Reviewed-by: Rex Zhu <Rex.Zhu@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c | 44 |
1 files changed, 15 insertions, 29 deletions
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c index 8a1ee9ce7386..57143d51e3ee 100644 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c | |||
@@ -1875,38 +1875,20 @@ static int vega20_get_gpu_power(struct pp_hwmgr *hwmgr, | |||
1875 | return ret; | 1875 | return ret; |
1876 | } | 1876 | } |
1877 | 1877 | ||
1878 | static int vega20_get_current_gfx_clk_freq(struct pp_hwmgr *hwmgr, uint32_t *gfx_freq) | 1878 | static int vega20_get_current_clk_freq(struct pp_hwmgr *hwmgr, |
1879 | PPCLK_e clk_id, uint32_t *clk_freq) | ||
1879 | { | 1880 | { |
1880 | uint32_t gfx_clk = 0; | ||
1881 | int ret = 0; | 1881 | int ret = 0; |
1882 | 1882 | ||
1883 | *gfx_freq = 0; | 1883 | *clk_freq = 0; |
1884 | 1884 | ||
1885 | PP_ASSERT_WITH_CODE((ret = smum_send_msg_to_smc_with_parameter(hwmgr, | 1885 | PP_ASSERT_WITH_CODE((ret = smum_send_msg_to_smc_with_parameter(hwmgr, |
1886 | PPSMC_MSG_GetDpmClockFreq, (PPCLK_GFXCLK << 16))) == 0, | 1886 | PPSMC_MSG_GetDpmClockFreq, (clk_id << 16))) == 0, |
1887 | "[GetCurrentGfxClkFreq] Attempt to get Current GFXCLK Frequency Failed!", | 1887 | "[GetCurrentClkFreq] Attempt to get Current Frequency Failed!", |
1888 | return ret); | 1888 | return ret); |
1889 | gfx_clk = smum_get_argument(hwmgr); | 1889 | *clk_freq = smum_get_argument(hwmgr); |
1890 | 1890 | ||
1891 | *gfx_freq = gfx_clk * 100; | 1891 | *clk_freq = *clk_freq * 100; |
1892 | |||
1893 | return 0; | ||
1894 | } | ||
1895 | |||
1896 | static int vega20_get_current_mclk_freq(struct pp_hwmgr *hwmgr, uint32_t *mclk_freq) | ||
1897 | { | ||
1898 | uint32_t mem_clk = 0; | ||
1899 | int ret = 0; | ||
1900 | |||
1901 | *mclk_freq = 0; | ||
1902 | |||
1903 | PP_ASSERT_WITH_CODE((ret = smum_send_msg_to_smc_with_parameter(hwmgr, | ||
1904 | PPSMC_MSG_GetDpmClockFreq, (PPCLK_UCLK << 16))) == 0, | ||
1905 | "[GetCurrentMClkFreq] Attempt to get Current MCLK Frequency Failed!", | ||
1906 | return ret); | ||
1907 | mem_clk = smum_get_argument(hwmgr); | ||
1908 | |||
1909 | *mclk_freq = mem_clk * 100; | ||
1910 | 1892 | ||
1911 | return 0; | 1893 | return 0; |
1912 | } | 1894 | } |
@@ -1937,12 +1919,16 @@ static int vega20_read_sensor(struct pp_hwmgr *hwmgr, int idx, | |||
1937 | 1919 | ||
1938 | switch (idx) { | 1920 | switch (idx) { |
1939 | case AMDGPU_PP_SENSOR_GFX_SCLK: | 1921 | case AMDGPU_PP_SENSOR_GFX_SCLK: |
1940 | ret = vega20_get_current_gfx_clk_freq(hwmgr, (uint32_t *)value); | 1922 | ret = vega20_get_current_clk_freq(hwmgr, |
1923 | PPCLK_GFXCLK, | ||
1924 | (uint32_t *)value); | ||
1941 | if (!ret) | 1925 | if (!ret) |
1942 | *size = 4; | 1926 | *size = 4; |
1943 | break; | 1927 | break; |
1944 | case AMDGPU_PP_SENSOR_GFX_MCLK: | 1928 | case AMDGPU_PP_SENSOR_GFX_MCLK: |
1945 | ret = vega20_get_current_mclk_freq(hwmgr, (uint32_t *)value); | 1929 | ret = vega20_get_current_clk_freq(hwmgr, |
1930 | PPCLK_UCLK, | ||
1931 | (uint32_t *)value); | ||
1946 | if (!ret) | 1932 | if (!ret) |
1947 | *size = 4; | 1933 | *size = 4; |
1948 | break; | 1934 | break; |
@@ -2743,7 +2729,7 @@ static int vega20_print_clock_levels(struct pp_hwmgr *hwmgr, | |||
2743 | 2729 | ||
2744 | switch (type) { | 2730 | switch (type) { |
2745 | case PP_SCLK: | 2731 | case PP_SCLK: |
2746 | ret = vega20_get_current_gfx_clk_freq(hwmgr, &now); | 2732 | ret = vega20_get_current_clk_freq(hwmgr, PPCLK_GFXCLK, &now); |
2747 | PP_ASSERT_WITH_CODE(!ret, | 2733 | PP_ASSERT_WITH_CODE(!ret, |
2748 | "Attempt to get current gfx clk Failed!", | 2734 | "Attempt to get current gfx clk Failed!", |
2749 | return ret); | 2735 | return ret); |
@@ -2760,7 +2746,7 @@ static int vega20_print_clock_levels(struct pp_hwmgr *hwmgr, | |||
2760 | break; | 2746 | break; |
2761 | 2747 | ||
2762 | case PP_MCLK: | 2748 | case PP_MCLK: |
2763 | ret = vega20_get_current_mclk_freq(hwmgr, &now); | 2749 | ret = vega20_get_current_clk_freq(hwmgr, PPCLK_UCLK, &now); |
2764 | PP_ASSERT_WITH_CODE(!ret, | 2750 | PP_ASSERT_WITH_CODE(!ret, |
2765 | "Attempt to get current mclk freq Failed!", | 2751 | "Attempt to get current mclk freq Failed!", |
2766 | return ret); | 2752 | return ret); |