Commit 233d3ee4 authored by Kent Russell's avatar Kent Russell Committed by Alex Deucher

drm/amdgpu: Allow switching to CUSTOM profile on smu7 v2

Allow changing to the CUSTOM profile without requiring the
parameters being passed in each time. Store the values in
the smu7_profiling table since it's defined here anyways

v2: Add check that CUSTOM was previously set
Signed-off-by: default avatarKent Russell <kent.russell@amd.com>
Reviewed-by: default avatarEvan Quan <evan.quan@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent b4ae4fe6
...@@ -77,7 +77,7 @@ ...@@ -77,7 +77,7 @@
#define PCIE_BUS_CLK 10000 #define PCIE_BUS_CLK 10000
#define TCLK (PCIE_BUS_CLK / 10) #define TCLK (PCIE_BUS_CLK / 10)
static const struct profile_mode_setting smu7_profiling[7] = static struct profile_mode_setting smu7_profiling[7] =
{{0, 0, 0, 0, 0, 0, 0, 0}, {{0, 0, 0, 0, 0, 0, 0, 0},
{1, 0, 100, 30, 1, 0, 100, 10}, {1, 0, 100, 30, 1, 0, 100, 10},
{1, 10, 0, 30, 0, 0, 0, 0}, {1, 10, 0, 30, 0, 0, 0, 0},
...@@ -4984,17 +4984,27 @@ static int smu7_set_power_profile_mode(struct pp_hwmgr *hwmgr, long *input, uint ...@@ -4984,17 +4984,27 @@ static int smu7_set_power_profile_mode(struct pp_hwmgr *hwmgr, long *input, uint
mode = input[size]; mode = input[size];
switch (mode) { switch (mode) {
case PP_SMC_POWER_PROFILE_CUSTOM: case PP_SMC_POWER_PROFILE_CUSTOM:
if (size < 8) if (size < 8 && size != 0)
return -EINVAL; return -EINVAL;
/* If only CUSTOM is passed in, use the saved values. Check
tmp.bupdate_sclk = input[0]; * that we actually have a CUSTOM profile by ensuring that
tmp.sclk_up_hyst = input[1]; * the "use sclk" or the "use mclk" bits are set
tmp.sclk_down_hyst = input[2]; */
tmp.sclk_activity = input[3]; tmp = smu7_profiling[PP_SMC_POWER_PROFILE_CUSTOM];
tmp.bupdate_mclk = input[4]; if (size == 0) {
tmp.mclk_up_hyst = input[5]; if (tmp.bupdate_sclk == 0 && tmp.bupdate_mclk == 0)
tmp.mclk_down_hyst = input[6]; return -EINVAL;
tmp.mclk_activity = input[7]; } else {
tmp.bupdate_sclk = input[0];
tmp.sclk_up_hyst = input[1];
tmp.sclk_down_hyst = input[2];
tmp.sclk_activity = input[3];
tmp.bupdate_mclk = input[4];
tmp.mclk_up_hyst = input[5];
tmp.mclk_down_hyst = input[6];
tmp.mclk_activity = input[7];
smu7_profiling[PP_SMC_POWER_PROFILE_CUSTOM] = tmp;
}
if (!smum_update_dpm_settings(hwmgr, &tmp)) { if (!smum_update_dpm_settings(hwmgr, &tmp)) {
memcpy(&data->current_profile_setting, &tmp, sizeof(struct profile_mode_setting)); memcpy(&data->current_profile_setting, &tmp, sizeof(struct profile_mode_setting));
hwmgr->power_profile_mode = mode; hwmgr->power_profile_mode = mode;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment