|
@@ -5008,6 +5008,29 @@ static int smu7_set_power_profile_mode(struct pp_hwmgr *hwmgr, long *input, uint
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static int smu7_get_performance_level(struct pp_hwmgr *hwmgr, const struct pp_hw_power_state *state,
|
|
|
+ PHM_PerformanceLevelDesignation designation, uint32_t index,
|
|
|
+ PHM_PerformanceLevel *level)
|
|
|
+{
|
|
|
+ const struct smu7_power_state *ps;
|
|
|
+ struct smu7_hwmgr *data;
|
|
|
+ uint32_t i;
|
|
|
+
|
|
|
+ if (level == NULL || hwmgr == NULL || state == NULL)
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
+ data = hwmgr->backend;
|
|
|
+ ps = cast_const_phw_smu7_power_state(state);
|
|
|
+
|
|
|
+ i = index > ps->performance_level_count - 1 ?
|
|
|
+ ps->performance_level_count - 1 : index;
|
|
|
+
|
|
|
+ level->coreClock = ps->performance_levels[i].engine_clock;
|
|
|
+ level->memory_clock = ps->performance_levels[i].memory_clock;
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static const struct pp_hwmgr_func smu7_hwmgr_funcs = {
|
|
|
.backend_init = &smu7_hwmgr_backend_init,
|
|
|
.backend_fini = &smu7_hwmgr_backend_fini,
|
|
@@ -5064,6 +5087,7 @@ static const struct pp_hwmgr_func smu7_hwmgr_funcs = {
|
|
|
.set_power_limit = smu7_set_power_limit,
|
|
|
.get_power_profile_mode = smu7_get_power_profile_mode,
|
|
|
.set_power_profile_mode = smu7_set_power_profile_mode,
|
|
|
+ .get_performance_level = smu7_get_performance_level,
|
|
|
};
|
|
|
|
|
|
uint8_t smu7_get_sleep_divider_id_from_clock(uint32_t clock,
|