drm/amd/pp: Expose the smu support for SDMA PG cntl

SDMA IP can be power up/down via smu message

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Rex Zhu <Rex.Zhu@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
Rex Zhu 2018-09-25 19:45:46 +08:00 committed by Alex Deucher
parent c52dcf4919
commit 40bea02f4a
3 changed files with 27 additions and 0 deletions

View File

@ -1196,6 +1196,21 @@ static void pp_dpm_powergate_acp(void *handle, bool gate)
hwmgr->hwmgr_func->powergate_acp(hwmgr, gate); hwmgr->hwmgr_func->powergate_acp(hwmgr, gate);
} }
static void pp_dpm_powergate_sdma(void *handle, bool gate)
{
struct pp_hwmgr *hwmgr = handle;
if (!hwmgr)
return;
if (hwmgr->hwmgr_func->powergate_sdma == NULL) {
pr_info("%s was not implemented.\n", __func__);
return;
}
hwmgr->hwmgr_func->powergate_sdma(hwmgr, gate);
}
static int pp_set_powergating_by_smu(void *handle, static int pp_set_powergating_by_smu(void *handle,
uint32_t block_type, bool gate) uint32_t block_type, bool gate)
{ {
@ -1218,6 +1233,9 @@ static int pp_set_powergating_by_smu(void *handle,
case AMD_IP_BLOCK_TYPE_ACP: case AMD_IP_BLOCK_TYPE_ACP:
pp_dpm_powergate_acp(handle, gate); pp_dpm_powergate_acp(handle, gate);
break; break;
case AMD_IP_BLOCK_TYPE_SDMA:
pp_dpm_powergate_sdma(handle, gate);
break;
default: default:
break; break;
} }

View File

@ -1153,6 +1153,14 @@ static int smu10_powergate_mmhub(struct pp_hwmgr *hwmgr)
return smum_send_msg_to_smc(hwmgr, PPSMC_MSG_PowerGateMmHub); return smum_send_msg_to_smc(hwmgr, PPSMC_MSG_PowerGateMmHub);
} }
static int smu10_powergate_sdma(struct pp_hwmgr *hwmgr, bool gate)
{
if (gate)
return smum_send_msg_to_smc(hwmgr, PPSMC_MSG_PowerDownSdma);
else
return smum_send_msg_to_smc(hwmgr, PPSMC_MSG_PowerUpSdma);
}
static void smu10_powergate_vcn(struct pp_hwmgr *hwmgr, bool bgate) static void smu10_powergate_vcn(struct pp_hwmgr *hwmgr, bool bgate)
{ {
if (bgate) { if (bgate) {

View File

@ -328,6 +328,7 @@ struct pp_hwmgr_func {
int (*set_power_limit)(struct pp_hwmgr *hwmgr, uint32_t n); int (*set_power_limit)(struct pp_hwmgr *hwmgr, uint32_t n);
int (*powergate_mmhub)(struct pp_hwmgr *hwmgr); int (*powergate_mmhub)(struct pp_hwmgr *hwmgr);
int (*smus_notify_pwe)(struct pp_hwmgr *hwmgr); int (*smus_notify_pwe)(struct pp_hwmgr *hwmgr);
int (*powergate_sdma)(struct pp_hwmgr *hwmgr, bool bgate);
int (*enable_mgpu_fan_boost)(struct pp_hwmgr *hwmgr); int (*enable_mgpu_fan_boost)(struct pp_hwmgr *hwmgr);
}; };