aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvan Quan <evan.quan@amd.com>2019-01-24 04:55:39 -0500
committerAlex Deucher <alexander.deucher@amd.com>2019-01-25 16:15:37 -0500
commit9e75f709fa2bc38aa77247aa58e5c7141f27a108 (patch)
tree505b75d2b259578b2e3c23a1446bacf1803ed88e
parent28e732dcd46b235c0242b9ec76964f17e6b00d1e (diff)
drm/amd/powerplay: avoid frequent metrics table export
That's unnecessary. Also it makes more sense to show all the clocks on one metrics table export. Signed-off-by: Evan Quan <evan.quan@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c43
-rw-r--r--drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.h3
2 files changed, 33 insertions, 13 deletions
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c
index 13f124125f5a..7b49a9a13a4a 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c
@@ -1958,16 +1958,36 @@ static uint32_t vega20_dpm_get_mclk(struct pp_hwmgr *hwmgr, bool low)
1958 return (mem_clk * 100); 1958 return (mem_clk * 100);
1959} 1959}
1960 1960
1961static int vega20_get_metrics_table(struct pp_hwmgr *hwmgr, SmuMetrics_t *metrics_table)
1962{
1963 struct vega20_hwmgr *data =
1964 (struct vega20_hwmgr *)(hwmgr->backend);
1965 int ret = 0;
1966
1967 if (!data->metrics_time || time_after(jiffies, data->metrics_time + HZ / 2)) {
1968 ret = smum_smc_table_manager(hwmgr, (uint8_t *)metrics_table,
1969 TABLE_SMU_METRICS, true);
1970 if (ret) {
1971 pr_info("Failed to export SMU metrics table!\n");
1972 return ret;
1973 }
1974 memcpy(&data->metrics_table, metrics_table, sizeof(SmuMetrics_t));
1975 data->metrics_time = jiffies;
1976 } else
1977 memcpy(metrics_table, &data->metrics_table, sizeof(SmuMetrics_t));
1978
1979 return ret;
1980}
1981
1961static int vega20_get_gpu_power(struct pp_hwmgr *hwmgr, 1982static int vega20_get_gpu_power(struct pp_hwmgr *hwmgr,
1962 uint32_t *query) 1983 uint32_t *query)
1963{ 1984{
1964 int ret = 0; 1985 int ret = 0;
1965 SmuMetrics_t metrics_table; 1986 SmuMetrics_t metrics_table;
1966 1987
1967 ret = smum_smc_table_manager(hwmgr, (uint8_t *)&metrics_table, TABLE_SMU_METRICS, true); 1988 ret = vega20_get_metrics_table(hwmgr, &metrics_table);
1968 PP_ASSERT_WITH_CODE(!ret, 1989 if (ret)
1969 "Failed to export SMU METRICS table!", 1990 return ret;
1970 return ret);
1971 1991
1972 *query = metrics_table.CurrSocketPower << 8; 1992 *query = metrics_table.CurrSocketPower << 8;
1973 1993
@@ -1998,10 +2018,9 @@ static int vega20_get_current_activity_percent(struct pp_hwmgr *hwmgr,
1998 int ret = 0; 2018 int ret = 0;
1999 SmuMetrics_t metrics_table; 2019 SmuMetrics_t metrics_table;
2000 2020
2001 ret = smum_smc_table_manager(hwmgr, (uint8_t *)&metrics_table, TABLE_SMU_METRICS, true); 2021 ret = vega20_get_metrics_table(hwmgr, &metrics_table);
2002 PP_ASSERT_WITH_CODE(!ret, 2022 if (ret)
2003 "Failed to export SMU METRICS table!", 2023 return ret;
2004 return ret);
2005 2024
2006 *activity_percent = metrics_table.AverageGfxActivity; 2025 *activity_percent = metrics_table.AverageGfxActivity;
2007 2026
@@ -2019,11 +2038,9 @@ static int vega20_read_sensor(struct pp_hwmgr *hwmgr, int idx,
2019 2038
2020 switch (idx) { 2039 switch (idx) {
2021 case AMDGPU_PP_SENSOR_GFX_SCLK: 2040 case AMDGPU_PP_SENSOR_GFX_SCLK:
2022 ret = smum_smc_table_manager(hwmgr, (uint8_t *)&metrics_table, 2041 ret = vega20_get_metrics_table(hwmgr, &metrics_table);
2023 TABLE_SMU_METRICS, true); 2042 if (ret)
2024 PP_ASSERT_WITH_CODE(!ret, 2043 return ret;
2025 "Failed to export SMU METRICS table!",
2026 return ret);
2027 2044
2028 *((uint32_t *)value) = metrics_table.AverageGfxclkFrequency * 100; 2045 *((uint32_t *)value) = metrics_table.AverageGfxclkFrequency * 100;
2029 *size = 4; 2046 *size = 4;
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.h b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.h
index 25faaa5c5b10..37f5f5e657da 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.h
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.h
@@ -520,6 +520,9 @@ struct vega20_hwmgr {
520 /* ---- Gfxoff ---- */ 520 /* ---- Gfxoff ---- */
521 bool gfxoff_allowed; 521 bool gfxoff_allowed;
522 uint32_t counter_gfxoff; 522 uint32_t counter_gfxoff;
523
524 unsigned long metrics_time;
525 SmuMetrics_t metrics_table;
523}; 526};
524 527
525#define VEGA20_DPM2_NEAR_TDP_DEC 10 528#define VEGA20_DPM2_NEAR_TDP_DEC 10