mirror of
https://github.com/ukui/kernel.git
synced 2026-03-09 10:07:04 -07:00
drm/amd/powerplay: implement smu7 hwmgr to manager asics with smu ip version 7.
Signed-off-by: Rex Zhu <Rex.Zhu@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Reviewed-by: Ken Wang <Qingqing.Wang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
@@ -3,16 +3,19 @@
|
||||
# It provides the hardware management services for the driver.
|
||||
|
||||
HARDWARE_MGR = hwmgr.o processpptables.o functiontables.o \
|
||||
hardwaremanager.o pp_acpi.o cz_hwmgr.o \
|
||||
cz_clockpowergating.o tonga_powertune.o\
|
||||
process_pptables_v1_0.o ppatomctrl.o \
|
||||
tonga_hwmgr.o pppcielanes.o tonga_thermal.o\
|
||||
fiji_powertune.o fiji_hwmgr.o tonga_clockpowergating.o \
|
||||
fiji_clockpowergating.o fiji_thermal.o \
|
||||
polaris10_hwmgr.o polaris10_powertune.o polaris10_thermal.o \
|
||||
polaris10_clockpowergating.o iceland_hwmgr.o \
|
||||
iceland_clockpowergating.o iceland_thermal.o \
|
||||
iceland_powertune.o
|
||||
hardwaremanager.o pp_acpi.o cz_hwmgr.o \
|
||||
cz_clockpowergating.o tonga_powertune.o\
|
||||
process_pptables_v1_0.o ppatomctrl.o \
|
||||
tonga_hwmgr.o pppcielanes.o tonga_thermal.o\
|
||||
fiji_powertune.o fiji_hwmgr.o tonga_clockpowergating.o \
|
||||
fiji_clockpowergating.o fiji_thermal.o \
|
||||
polaris10_hwmgr.o polaris10_powertune.o polaris10_thermal.o \
|
||||
polaris10_clockpowergating.o \
|
||||
smu7_hwmgr.o smu7_powertune.o smu7_thermal.o \
|
||||
smu7_clockpowergating.o iceland_hwmgr.o \
|
||||
iceland_clockpowergating.o iceland_thermal.o \
|
||||
iceland_powertune.o
|
||||
|
||||
|
||||
AMD_PP_HWMGR = $(addprefix $(AMD_PP_PATH)/hwmgr/,$(HARDWARE_MGR))
|
||||
|
||||
|
||||
@@ -0,0 +1,488 @@
|
||||
/*
|
||||
* Copyright 2016 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "smu7_hwmgr.h"
|
||||
#include "smu7_clockpowergating.h"
|
||||
#include "smu7_common.h"
|
||||
|
||||
static int smu7_enable_disable_uvd_dpm(struct pp_hwmgr *hwmgr, bool enable)
|
||||
{
|
||||
return smum_send_msg_to_smc(hwmgr->smumgr, enable ?
|
||||
PPSMC_MSG_UVDDPM_Enable :
|
||||
PPSMC_MSG_UVDDPM_Disable);
|
||||
}
|
||||
|
||||
static int smu7_enable_disable_vce_dpm(struct pp_hwmgr *hwmgr, bool enable)
|
||||
{
|
||||
return smum_send_msg_to_smc(hwmgr->smumgr, enable ?
|
||||
PPSMC_MSG_VCEDPM_Enable :
|
||||
PPSMC_MSG_VCEDPM_Disable);
|
||||
}
|
||||
|
||||
static int smu7_enable_disable_samu_dpm(struct pp_hwmgr *hwmgr, bool enable)
|
||||
{
|
||||
return smum_send_msg_to_smc(hwmgr->smumgr, enable ?
|
||||
PPSMC_MSG_SAMUDPM_Enable :
|
||||
PPSMC_MSG_SAMUDPM_Disable);
|
||||
}
|
||||
|
||||
static int smu7_update_uvd_dpm(struct pp_hwmgr *hwmgr, bool bgate)
|
||||
{
|
||||
if (!bgate)
|
||||
smum_update_smc_table(hwmgr, SMU_UVD_TABLE);
|
||||
return smu7_enable_disable_uvd_dpm(hwmgr, !bgate);
|
||||
}
|
||||
|
||||
static int smu7_update_vce_dpm(struct pp_hwmgr *hwmgr, bool bgate)
|
||||
{
|
||||
if (!bgate)
|
||||
smum_update_smc_table(hwmgr, SMU_VCE_TABLE);
|
||||
return smu7_enable_disable_vce_dpm(hwmgr, !bgate);
|
||||
}
|
||||
|
||||
static int smu7_update_samu_dpm(struct pp_hwmgr *hwmgr, bool bgate)
|
||||
{
|
||||
if (!bgate)
|
||||
smum_update_smc_table(hwmgr, SMU_SAMU_TABLE);
|
||||
return smu7_enable_disable_samu_dpm(hwmgr, !bgate);
|
||||
}
|
||||
|
||||
int smu7_powerdown_uvd(struct pp_hwmgr *hwmgr)
|
||||
{
|
||||
if (phm_cf_want_uvd_power_gating(hwmgr))
|
||||
return smum_send_msg_to_smc(hwmgr->smumgr,
|
||||
PPSMC_MSG_UVDPowerOFF);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int smu7_powerup_uvd(struct pp_hwmgr *hwmgr)
|
||||
{
|
||||
if (phm_cf_want_uvd_power_gating(hwmgr)) {
|
||||
if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps,
|
||||
PHM_PlatformCaps_UVDDynamicPowerGating)) {
|
||||
return smum_send_msg_to_smc_with_parameter(hwmgr->smumgr,
|
||||
PPSMC_MSG_UVDPowerON, 1);
|
||||
} else {
|
||||
return smum_send_msg_to_smc_with_parameter(hwmgr->smumgr,
|
||||
PPSMC_MSG_UVDPowerON, 0);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int smu7_powerdown_vce(struct pp_hwmgr *hwmgr)
|
||||
{
|
||||
if (phm_cf_want_vce_power_gating(hwmgr))
|
||||
return smum_send_msg_to_smc(hwmgr->smumgr,
|
||||
PPSMC_MSG_VCEPowerOFF);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int smu7_powerup_vce(struct pp_hwmgr *hwmgr)
|
||||
{
|
||||
if (phm_cf_want_vce_power_gating(hwmgr))
|
||||
return smum_send_msg_to_smc(hwmgr->smumgr,
|
||||
PPSMC_MSG_VCEPowerON);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int smu7_powerdown_samu(struct pp_hwmgr *hwmgr)
|
||||
{
|
||||
if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps,
|
||||
PHM_PlatformCaps_SamuPowerGating))
|
||||
return smum_send_msg_to_smc(hwmgr->smumgr,
|
||||
PPSMC_MSG_SAMPowerOFF);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int smu7_powerup_samu(struct pp_hwmgr *hwmgr)
|
||||
{
|
||||
if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps,
|
||||
PHM_PlatformCaps_SamuPowerGating))
|
||||
return smum_send_msg_to_smc(hwmgr->smumgr,
|
||||
PPSMC_MSG_SAMPowerON);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int smu7_disable_clock_power_gating(struct pp_hwmgr *hwmgr)
|
||||
{
|
||||
struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend);
|
||||
|
||||
data->uvd_power_gated = false;
|
||||
data->vce_power_gated = false;
|
||||
data->samu_power_gated = false;
|
||||
|
||||
smu7_powerup_uvd(hwmgr);
|
||||
smu7_powerup_vce(hwmgr);
|
||||
smu7_powerup_samu(hwmgr);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int smu7_powergate_uvd(struct pp_hwmgr *hwmgr, bool bgate)
|
||||
{
|
||||
struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend);
|
||||
|
||||
data->uvd_power_gated = bgate;
|
||||
|
||||
if (bgate) {
|
||||
cgs_set_clockgating_state(hwmgr->device,
|
||||
AMD_IP_BLOCK_TYPE_UVD,
|
||||
AMD_CG_STATE_GATE);
|
||||
smu7_update_uvd_dpm(hwmgr, true);
|
||||
smu7_powerdown_uvd(hwmgr);
|
||||
} else {
|
||||
smu7_powerup_uvd(hwmgr);
|
||||
smu7_update_uvd_dpm(hwmgr, false);
|
||||
cgs_set_clockgating_state(hwmgr->device,
|
||||
AMD_IP_BLOCK_TYPE_UVD,
|
||||
AMD_CG_STATE_UNGATE);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int smu7_powergate_vce(struct pp_hwmgr *hwmgr, bool bgate)
|
||||
{
|
||||
struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend);
|
||||
|
||||
if (data->vce_power_gated == bgate)
|
||||
return 0;
|
||||
|
||||
data->vce_power_gated = bgate;
|
||||
|
||||
if (bgate) {
|
||||
cgs_set_clockgating_state(hwmgr->device,
|
||||
AMD_IP_BLOCK_TYPE_VCE,
|
||||
AMD_CG_STATE_GATE);
|
||||
smu7_update_vce_dpm(hwmgr, true);
|
||||
smu7_powerdown_vce(hwmgr);
|
||||
} else {
|
||||
smu7_powerup_vce(hwmgr);
|
||||
smu7_update_vce_dpm(hwmgr, false);
|
||||
cgs_set_clockgating_state(hwmgr->device,
|
||||
AMD_IP_BLOCK_TYPE_VCE,
|
||||
AMD_CG_STATE_UNGATE);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int smu7_powergate_samu(struct pp_hwmgr *hwmgr, bool bgate)
|
||||
{
|
||||
struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend);
|
||||
|
||||
if (data->samu_power_gated == bgate)
|
||||
return 0;
|
||||
|
||||
data->samu_power_gated = bgate;
|
||||
|
||||
if (bgate) {
|
||||
smu7_update_samu_dpm(hwmgr, true);
|
||||
smu7_powerdown_samu(hwmgr);
|
||||
} else {
|
||||
smu7_powerup_samu(hwmgr);
|
||||
smu7_update_samu_dpm(hwmgr, false);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int smu7_update_clock_gatings(struct pp_hwmgr *hwmgr,
|
||||
const uint32_t *msg_id)
|
||||
{
|
||||
PPSMC_Msg msg;
|
||||
uint32_t value;
|
||||
|
||||
if (!(hwmgr->feature_mask & PP_ENABLE_GFX_CG_THRU_SMU))
|
||||
return 0;
|
||||
|
||||
switch ((*msg_id & PP_GROUP_MASK) >> PP_GROUP_SHIFT) {
|
||||
case PP_GROUP_GFX:
|
||||
switch ((*msg_id & PP_BLOCK_MASK) >> PP_BLOCK_SHIFT) {
|
||||
case PP_BLOCK_GFX_CG:
|
||||
if (PP_STATE_SUPPORT_CG & *msg_id) {
|
||||
msg = ((*msg_id & PP_STATE_MASK) & PP_STATE_CG) ?
|
||||
PPSMC_MSG_EnableClockGatingFeature :
|
||||
PPSMC_MSG_DisableClockGatingFeature;
|
||||
value = CG_GFX_CGCG_MASK;
|
||||
|
||||
if (smum_send_msg_to_smc_with_parameter(
|
||||
hwmgr->smumgr, msg, value))
|
||||
return -EINVAL;
|
||||
}
|
||||
if (PP_STATE_SUPPORT_LS & *msg_id) {
|
||||
msg = (*msg_id & PP_STATE_MASK) & PP_STATE_LS
|
||||
? PPSMC_MSG_EnableClockGatingFeature
|
||||
: PPSMC_MSG_DisableClockGatingFeature;
|
||||
value = CG_GFX_CGLS_MASK;
|
||||
|
||||
if (smum_send_msg_to_smc_with_parameter(
|
||||
hwmgr->smumgr, msg, value))
|
||||
return -EINVAL;
|
||||
}
|
||||
break;
|
||||
|
||||
case PP_BLOCK_GFX_3D:
|
||||
if (PP_STATE_SUPPORT_CG & *msg_id) {
|
||||
msg = ((*msg_id & PP_STATE_MASK) & PP_STATE_CG) ?
|
||||
PPSMC_MSG_EnableClockGatingFeature :
|
||||
PPSMC_MSG_DisableClockGatingFeature;
|
||||
value = CG_GFX_3DCG_MASK;
|
||||
|
||||
if (smum_send_msg_to_smc_with_parameter(
|
||||
hwmgr->smumgr, msg, value))
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (PP_STATE_SUPPORT_LS & *msg_id) {
|
||||
msg = (*msg_id & PP_STATE_MASK) & PP_STATE_LS ?
|
||||
PPSMC_MSG_EnableClockGatingFeature :
|
||||
PPSMC_MSG_DisableClockGatingFeature;
|
||||
value = CG_GFX_3DLS_MASK;
|
||||
|
||||
if (smum_send_msg_to_smc_with_parameter(
|
||||
hwmgr->smumgr, msg, value))
|
||||
return -EINVAL;
|
||||
}
|
||||
break;
|
||||
|
||||
case PP_BLOCK_GFX_RLC:
|
||||
if (PP_STATE_SUPPORT_LS & *msg_id) {
|
||||
msg = (*msg_id & PP_STATE_MASK) & PP_STATE_LS ?
|
||||
PPSMC_MSG_EnableClockGatingFeature :
|
||||
PPSMC_MSG_DisableClockGatingFeature;
|
||||
value = CG_GFX_RLC_LS_MASK;
|
||||
|
||||
if (smum_send_msg_to_smc_with_parameter(
|
||||
hwmgr->smumgr, msg, value))
|
||||
return -EINVAL;
|
||||
}
|
||||
break;
|
||||
|
||||
case PP_BLOCK_GFX_CP:
|
||||
if (PP_STATE_SUPPORT_LS & *msg_id) {
|
||||
msg = (*msg_id & PP_STATE_MASK) & PP_STATE_LS ?
|
||||
PPSMC_MSG_EnableClockGatingFeature :
|
||||
PPSMC_MSG_DisableClockGatingFeature;
|
||||
value = CG_GFX_CP_LS_MASK;
|
||||
|
||||
if (smum_send_msg_to_smc_with_parameter(
|
||||
hwmgr->smumgr, msg, value))
|
||||
return -EINVAL;
|
||||
}
|
||||
break;
|
||||
|
||||
case PP_BLOCK_GFX_MG:
|
||||
if (PP_STATE_SUPPORT_CG & *msg_id) {
|
||||
msg = ((*msg_id & PP_STATE_MASK) & PP_STATE_CG) ?
|
||||
PPSMC_MSG_EnableClockGatingFeature :
|
||||
PPSMC_MSG_DisableClockGatingFeature;
|
||||
value = (CG_CPF_MGCG_MASK | CG_RLC_MGCG_MASK |
|
||||
CG_GFX_OTHERS_MGCG_MASK);
|
||||
|
||||
if (smum_send_msg_to_smc_with_parameter(
|
||||
hwmgr->smumgr, msg, value))
|
||||
return -EINVAL;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
break;
|
||||
|
||||
case PP_GROUP_SYS:
|
||||
switch ((*msg_id & PP_BLOCK_MASK) >> PP_BLOCK_SHIFT) {
|
||||
case PP_BLOCK_SYS_BIF:
|
||||
if (PP_STATE_SUPPORT_CG & *msg_id) {
|
||||
msg = (*msg_id & PP_STATE_MASK) & PP_STATE_CG ?
|
||||
PPSMC_MSG_EnableClockGatingFeature :
|
||||
PPSMC_MSG_DisableClockGatingFeature;
|
||||
value = CG_SYS_BIF_MGCG_MASK;
|
||||
|
||||
if (smum_send_msg_to_smc_with_parameter(
|
||||
hwmgr->smumgr, msg, value))
|
||||
return -EINVAL;
|
||||
}
|
||||
if (PP_STATE_SUPPORT_LS & *msg_id) {
|
||||
msg = (*msg_id & PP_STATE_MASK) & PP_STATE_LS ?
|
||||
PPSMC_MSG_EnableClockGatingFeature :
|
||||
PPSMC_MSG_DisableClockGatingFeature;
|
||||
value = CG_SYS_BIF_MGLS_MASK;
|
||||
|
||||
if (smum_send_msg_to_smc_with_parameter(
|
||||
hwmgr->smumgr, msg, value))
|
||||
return -EINVAL;
|
||||
}
|
||||
break;
|
||||
|
||||
case PP_BLOCK_SYS_MC:
|
||||
if (PP_STATE_SUPPORT_CG & *msg_id) {
|
||||
msg = ((*msg_id & PP_STATE_MASK) & PP_STATE_CG) ?
|
||||
PPSMC_MSG_EnableClockGatingFeature :
|
||||
PPSMC_MSG_DisableClockGatingFeature;
|
||||
value = CG_SYS_MC_MGCG_MASK;
|
||||
|
||||
if (smum_send_msg_to_smc_with_parameter(
|
||||
hwmgr->smumgr, msg, value))
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (PP_STATE_SUPPORT_LS & *msg_id) {
|
||||
msg = (*msg_id & PP_STATE_MASK) & PP_STATE_LS ?
|
||||
PPSMC_MSG_EnableClockGatingFeature :
|
||||
PPSMC_MSG_DisableClockGatingFeature;
|
||||
value = CG_SYS_MC_MGLS_MASK;
|
||||
|
||||
if (smum_send_msg_to_smc_with_parameter(
|
||||
hwmgr->smumgr, msg, value))
|
||||
return -EINVAL;
|
||||
}
|
||||
break;
|
||||
|
||||
case PP_BLOCK_SYS_DRM:
|
||||
if (PP_STATE_SUPPORT_CG & *msg_id) {
|
||||
msg = (*msg_id & PP_STATE_MASK) & PP_STATE_CG ?
|
||||
PPSMC_MSG_EnableClockGatingFeature :
|
||||
PPSMC_MSG_DisableClockGatingFeature;
|
||||
value = CG_SYS_DRM_MGCG_MASK;
|
||||
|
||||
if (smum_send_msg_to_smc_with_parameter(
|
||||
hwmgr->smumgr, msg, value))
|
||||
return -EINVAL;
|
||||
}
|
||||
if (PP_STATE_SUPPORT_LS & *msg_id) {
|
||||
msg = (*msg_id & PP_STATE_MASK) & PP_STATE_LS ?
|
||||
PPSMC_MSG_EnableClockGatingFeature :
|
||||
PPSMC_MSG_DisableClockGatingFeature;
|
||||
value = CG_SYS_DRM_MGLS_MASK;
|
||||
|
||||
if (smum_send_msg_to_smc_with_parameter(
|
||||
hwmgr->smumgr, msg, value))
|
||||
return -EINVAL;
|
||||
}
|
||||
break;
|
||||
|
||||
case PP_BLOCK_SYS_HDP:
|
||||
if (PP_STATE_SUPPORT_CG & *msg_id) {
|
||||
msg = ((*msg_id & PP_STATE_MASK) & PP_STATE_CG) ?
|
||||
PPSMC_MSG_EnableClockGatingFeature :
|
||||
PPSMC_MSG_DisableClockGatingFeature;
|
||||
value = CG_SYS_HDP_MGCG_MASK;
|
||||
|
||||
if (smum_send_msg_to_smc_with_parameter(
|
||||
hwmgr->smumgr, msg, value))
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (PP_STATE_SUPPORT_LS & *msg_id) {
|
||||
msg = (*msg_id & PP_STATE_MASK) & PP_STATE_LS ?
|
||||
PPSMC_MSG_EnableClockGatingFeature :
|
||||
PPSMC_MSG_DisableClockGatingFeature;
|
||||
value = CG_SYS_HDP_MGLS_MASK;
|
||||
|
||||
if (smum_send_msg_to_smc_with_parameter(
|
||||
hwmgr->smumgr, msg, value))
|
||||
return -EINVAL;
|
||||
}
|
||||
break;
|
||||
|
||||
case PP_BLOCK_SYS_SDMA:
|
||||
if (PP_STATE_SUPPORT_CG & *msg_id) {
|
||||
msg = ((*msg_id & PP_STATE_MASK) & PP_STATE_CG) ?
|
||||
PPSMC_MSG_EnableClockGatingFeature :
|
||||
PPSMC_MSG_DisableClockGatingFeature;
|
||||
value = CG_SYS_SDMA_MGCG_MASK;
|
||||
|
||||
if (smum_send_msg_to_smc_with_parameter(
|
||||
hwmgr->smumgr, msg, value))
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (PP_STATE_SUPPORT_LS & *msg_id) {
|
||||
msg = (*msg_id & PP_STATE_MASK) & PP_STATE_LS ?
|
||||
PPSMC_MSG_EnableClockGatingFeature :
|
||||
PPSMC_MSG_DisableClockGatingFeature;
|
||||
value = CG_SYS_SDMA_MGLS_MASK;
|
||||
|
||||
if (smum_send_msg_to_smc_with_parameter(
|
||||
hwmgr->smumgr, msg, value))
|
||||
return -EINVAL;
|
||||
}
|
||||
break;
|
||||
|
||||
case PP_BLOCK_SYS_ROM:
|
||||
if (PP_STATE_SUPPORT_CG & *msg_id) {
|
||||
msg = ((*msg_id & PP_STATE_MASK) & PP_STATE_CG) ?
|
||||
PPSMC_MSG_EnableClockGatingFeature :
|
||||
PPSMC_MSG_DisableClockGatingFeature;
|
||||
value = CG_SYS_ROM_MASK;
|
||||
|
||||
if (smum_send_msg_to_smc_with_parameter(
|
||||
hwmgr->smumgr, msg, value))
|
||||
return -EINVAL;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
return -EINVAL;
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
return -EINVAL;
|
||||
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* This function is for Polaris11 only for now,
|
||||
* Powerplay will only control the static per CU Power Gating.
|
||||
* Dynamic per CU Power Gating will be done in gfx.
|
||||
*/
|
||||
int smu7_enable_per_cu_power_gating(struct pp_hwmgr *hwmgr, bool enable)
|
||||
{
|
||||
struct cgs_system_info sys_info = {0};
|
||||
uint32_t active_cus;
|
||||
int result;
|
||||
|
||||
sys_info.size = sizeof(struct cgs_system_info);
|
||||
sys_info.info_id = CGS_SYSTEM_INFO_GFX_CU_INFO;
|
||||
|
||||
result = cgs_query_system_info(hwmgr->device, &sys_info);
|
||||
|
||||
if (result)
|
||||
return -EINVAL;
|
||||
|
||||
active_cus = sys_info.value;
|
||||
|
||||
if (enable)
|
||||
return smum_send_msg_to_smc_with_parameter(hwmgr->smumgr,
|
||||
PPSMC_MSG_GFX_CU_PG_ENABLE, active_cus);
|
||||
else
|
||||
return smum_send_msg_to_smc(hwmgr->smumgr,
|
||||
PPSMC_MSG_GFX_CU_PG_DISABLE);
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* Copyright 2016 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _SMU7_CLOCK_POWER_GATING_H_
|
||||
#define _SMU7_CLOCK__POWER_GATING_H_
|
||||
|
||||
#include "smu7_hwmgr.h"
|
||||
#include "pp_asicblocks.h"
|
||||
|
||||
int smu7_powergate_vce(struct pp_hwmgr *hwmgr, bool bgate);
|
||||
int smu7_powergate_uvd(struct pp_hwmgr *hwmgr, bool bgate);
|
||||
int smu7_powerdown_uvd(struct pp_hwmgr *hwmgr);
|
||||
int smu7_powergate_samu(struct pp_hwmgr *hwmgr, bool bgate);
|
||||
int smu7_powergate_acp(struct pp_hwmgr *hwmgr, bool bgate);
|
||||
int smu7_disable_clock_power_gating(struct pp_hwmgr *hwmgr);
|
||||
int smu7_update_clock_gatings(struct pp_hwmgr *hwmgr,
|
||||
const uint32_t *msg_id);
|
||||
int smu7_enable_per_cu_power_gating(struct pp_hwmgr *hwmgr, bool enable);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,55 @@
|
||||
/*
|
||||
* Copyright 2015 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _SMU7_DYN_DEFAULTS_H
|
||||
#define _SMU7_DYN_DEFAULTS_H
|
||||
|
||||
|
||||
/* We need to fill in the default values */
|
||||
|
||||
|
||||
#define SMU7_VOTINGRIGHTSCLIENTS_DFLT0 0x3FFFC102
|
||||
#define SMU7_VOTINGRIGHTSCLIENTS_DFLT1 0x000400
|
||||
#define SMU7_VOTINGRIGHTSCLIENTS_DFLT2 0xC00080
|
||||
#define SMU7_VOTINGRIGHTSCLIENTS_DFLT3 0xC00200
|
||||
#define SMU7_VOTINGRIGHTSCLIENTS_DFLT4 0xC01680
|
||||
#define SMU7_VOTINGRIGHTSCLIENTS_DFLT5 0xC00033
|
||||
#define SMU7_VOTINGRIGHTSCLIENTS_DFLT6 0xC00033
|
||||
#define SMU7_VOTINGRIGHTSCLIENTS_DFLT7 0x3FFFC000
|
||||
|
||||
|
||||
#define SMU7_THERMALPROTECTCOUNTER_DFLT 0x200
|
||||
#define SMU7_STATICSCREENTHRESHOLDUNIT_DFLT 0
|
||||
#define SMU7_STATICSCREENTHRESHOLD_DFLT 0x00C8
|
||||
#define SMU7_GFXIDLECLOCKSTOPTHRESHOLD_DFLT 0x200
|
||||
#define SMU7_REFERENCEDIVIDER_DFLT 4
|
||||
|
||||
#define SMU7_ULVVOLTAGECHANGEDELAY_DFLT 1687
|
||||
|
||||
#define SMU7_CGULVPARAMETER_DFLT 0x00040035
|
||||
#define SMU7_CGULVCONTROL_DFLT 0x00007450
|
||||
#define SMU7_TARGETACTIVITY_DFLT 50
|
||||
#define SMU7_MCLK_TARGETACTIVITY_DFLT 10
|
||||
|
||||
#endif
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,353 @@
|
||||
/*
|
||||
* Copyright 2015 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _SMU7_HWMGR_H
|
||||
#define _SMU7_HWMGR_H
|
||||
|
||||
#include "hwmgr.h"
|
||||
#include "ppatomctrl.h"
|
||||
|
||||
#define SMU7_MAX_HARDWARE_POWERLEVELS 2
|
||||
|
||||
#define SMU7_VOLTAGE_CONTROL_NONE 0x0
|
||||
#define SMU7_VOLTAGE_CONTROL_BY_GPIO 0x1
|
||||
#define SMU7_VOLTAGE_CONTROL_BY_SVID2 0x2
|
||||
#define SMU7_VOLTAGE_CONTROL_MERGED 0x3
|
||||
|
||||
#define DPMTABLE_OD_UPDATE_SCLK 0x00000001
|
||||
#define DPMTABLE_OD_UPDATE_MCLK 0x00000002
|
||||
#define DPMTABLE_UPDATE_SCLK 0x00000004
|
||||
#define DPMTABLE_UPDATE_MCLK 0x00000008
|
||||
|
||||
enum gpu_pt_config_reg_type {
|
||||
GPU_CONFIGREG_MMR = 0,
|
||||
GPU_CONFIGREG_SMC_IND,
|
||||
GPU_CONFIGREG_DIDT_IND,
|
||||
GPU_CONFIGREG_GC_CAC_IND,
|
||||
GPU_CONFIGREG_CACHE,
|
||||
GPU_CONFIGREG_MAX
|
||||
};
|
||||
|
||||
struct gpu_pt_config_reg {
|
||||
uint32_t offset;
|
||||
uint32_t mask;
|
||||
uint32_t shift;
|
||||
uint32_t value;
|
||||
enum gpu_pt_config_reg_type type;
|
||||
};
|
||||
|
||||
struct smu7_performance_level {
|
||||
uint32_t memory_clock;
|
||||
uint32_t engine_clock;
|
||||
uint16_t pcie_gen;
|
||||
uint16_t pcie_lane;
|
||||
};
|
||||
|
||||
struct smu7_thermal_temperature_setting {
|
||||
long temperature_low;
|
||||
long temperature_high;
|
||||
long temperature_shutdown;
|
||||
};
|
||||
|
||||
struct smu7_uvd_clocks {
|
||||
uint32_t vclk;
|
||||
uint32_t dclk;
|
||||
};
|
||||
|
||||
struct smu7_vce_clocks {
|
||||
uint32_t evclk;
|
||||
uint32_t ecclk;
|
||||
};
|
||||
|
||||
struct smu7_power_state {
|
||||
uint32_t magic;
|
||||
struct smu7_uvd_clocks uvd_clks;
|
||||
struct smu7_vce_clocks vce_clks;
|
||||
uint32_t sam_clk;
|
||||
uint16_t performance_level_count;
|
||||
bool dc_compatible;
|
||||
uint32_t sclk_threshold;
|
||||
struct smu7_performance_level performance_levels[SMU7_MAX_HARDWARE_POWERLEVELS];
|
||||
};
|
||||
|
||||
struct smu7_dpm_level {
|
||||
bool enabled;
|
||||
uint32_t value;
|
||||
uint32_t param1;
|
||||
};
|
||||
|
||||
#define SMU7_MAX_DEEPSLEEP_DIVIDER_ID 5
|
||||
#define MAX_REGULAR_DPM_NUMBER 8
|
||||
#define SMU7_MINIMUM_ENGINE_CLOCK 2500
|
||||
|
||||
struct smu7_single_dpm_table {
|
||||
uint32_t count;
|
||||
struct smu7_dpm_level dpm_levels[MAX_REGULAR_DPM_NUMBER];
|
||||
};
|
||||
|
||||
struct smu7_dpm_table {
|
||||
struct smu7_single_dpm_table sclk_table;
|
||||
struct smu7_single_dpm_table mclk_table;
|
||||
struct smu7_single_dpm_table pcie_speed_table;
|
||||
struct smu7_single_dpm_table vddc_table;
|
||||
struct smu7_single_dpm_table vddci_table;
|
||||
struct smu7_single_dpm_table mvdd_table;
|
||||
};
|
||||
|
||||
struct smu7_clock_registers {
|
||||
uint32_t vCG_SPLL_FUNC_CNTL;
|
||||
uint32_t vCG_SPLL_FUNC_CNTL_2;
|
||||
uint32_t vCG_SPLL_FUNC_CNTL_3;
|
||||
uint32_t vCG_SPLL_FUNC_CNTL_4;
|
||||
uint32_t vCG_SPLL_SPREAD_SPECTRUM;
|
||||
uint32_t vCG_SPLL_SPREAD_SPECTRUM_2;
|
||||
uint32_t vDLL_CNTL;
|
||||
uint32_t vMCLK_PWRMGT_CNTL;
|
||||
uint32_t vMPLL_AD_FUNC_CNTL;
|
||||
uint32_t vMPLL_DQ_FUNC_CNTL;
|
||||
uint32_t vMPLL_FUNC_CNTL;
|
||||
uint32_t vMPLL_FUNC_CNTL_1;
|
||||
uint32_t vMPLL_FUNC_CNTL_2;
|
||||
uint32_t vMPLL_SS1;
|
||||
uint32_t vMPLL_SS2;
|
||||
};
|
||||
|
||||
#define DISABLE_MC_LOADMICROCODE 1
|
||||
#define DISABLE_MC_CFGPROGRAMMING 2
|
||||
|
||||
struct smu7_voltage_smio_registers {
|
||||
uint32_t vS0_VID_LOWER_SMIO_CNTL;
|
||||
};
|
||||
|
||||
#define SMU7_MAX_LEAKAGE_COUNT 8
|
||||
|
||||
struct smu7_leakage_voltage {
|
||||
uint16_t count;
|
||||
uint16_t leakage_id[SMU7_MAX_LEAKAGE_COUNT];
|
||||
uint16_t actual_voltage[SMU7_MAX_LEAKAGE_COUNT];
|
||||
};
|
||||
|
||||
struct smu7_vbios_boot_state {
|
||||
uint16_t mvdd_bootup_value;
|
||||
uint16_t vddc_bootup_value;
|
||||
uint16_t vddci_bootup_value;
|
||||
uint16_t vddgfx_bootup_value;
|
||||
uint32_t sclk_bootup_value;
|
||||
uint32_t mclk_bootup_value;
|
||||
uint16_t pcie_gen_bootup_value;
|
||||
uint16_t pcie_lane_bootup_value;
|
||||
};
|
||||
|
||||
struct smu7_display_timing {
|
||||
uint32_t min_clock_in_sr;
|
||||
uint32_t num_existing_displays;
|
||||
};
|
||||
|
||||
struct smu7_dpmlevel_enable_mask {
|
||||
uint32_t uvd_dpm_enable_mask;
|
||||
uint32_t vce_dpm_enable_mask;
|
||||
uint32_t acp_dpm_enable_mask;
|
||||
uint32_t samu_dpm_enable_mask;
|
||||
uint32_t sclk_dpm_enable_mask;
|
||||
uint32_t mclk_dpm_enable_mask;
|
||||
uint32_t pcie_dpm_enable_mask;
|
||||
};
|
||||
|
||||
struct smu7_pcie_perf_range {
|
||||
uint16_t max;
|
||||
uint16_t min;
|
||||
};
|
||||
|
||||
struct smu7_hwmgr {
|
||||
struct smu7_dpm_table dpm_table;
|
||||
struct smu7_dpm_table golden_dpm_table;
|
||||
|
||||
uint32_t voting_rights_clients0;
|
||||
uint32_t voting_rights_clients1;
|
||||
uint32_t voting_rights_clients2;
|
||||
uint32_t voting_rights_clients3;
|
||||
uint32_t voting_rights_clients4;
|
||||
uint32_t voting_rights_clients5;
|
||||
uint32_t voting_rights_clients6;
|
||||
uint32_t voting_rights_clients7;
|
||||
uint32_t static_screen_threshold_unit;
|
||||
uint32_t static_screen_threshold;
|
||||
uint32_t voltage_control;
|
||||
uint32_t vdd_gfx_control;
|
||||
uint32_t vddc_vddgfx_delta;
|
||||
uint32_t active_auto_throttle_sources;
|
||||
|
||||
struct smu7_clock_registers clock_registers;
|
||||
|
||||
bool is_memory_gddr5;
|
||||
uint16_t acpi_vddc;
|
||||
bool pspp_notify_required;
|
||||
uint16_t force_pcie_gen;
|
||||
uint16_t acpi_pcie_gen;
|
||||
uint32_t pcie_gen_cap;
|
||||
uint32_t pcie_lane_cap;
|
||||
uint32_t pcie_spc_cap;
|
||||
struct smu7_leakage_voltage vddc_leakage;
|
||||
struct smu7_leakage_voltage vddci_leakage;
|
||||
struct smu7_leakage_voltage vddcgfx_leakage;
|
||||
|
||||
uint32_t mvdd_control;
|
||||
uint32_t vddc_mask_low;
|
||||
uint32_t mvdd_mask_low;
|
||||
uint16_t max_vddc_in_pptable;
|
||||
uint16_t min_vddc_in_pptable;
|
||||
uint16_t max_vddci_in_pptable;
|
||||
uint16_t min_vddci_in_pptable;
|
||||
bool is_uvd_enabled;
|
||||
struct smu7_vbios_boot_state vbios_boot_state;
|
||||
|
||||
bool pcie_performance_request;
|
||||
bool battery_state;
|
||||
bool is_tlu_enabled;
|
||||
bool disable_handshake;
|
||||
bool smc_voltage_control_enabled;
|
||||
bool vbi_time_out_support;
|
||||
|
||||
uint32_t soft_regs_start;
|
||||
/* ---- Stuff originally coming from Evergreen ---- */
|
||||
uint32_t vddci_control;
|
||||
struct pp_atomctrl_voltage_table vddc_voltage_table;
|
||||
struct pp_atomctrl_voltage_table vddci_voltage_table;
|
||||
struct pp_atomctrl_voltage_table mvdd_voltage_table;
|
||||
struct pp_atomctrl_voltage_table vddgfx_voltage_table;
|
||||
|
||||
uint32_t mgcg_cgtt_local2;
|
||||
uint32_t mgcg_cgtt_local3;
|
||||
uint32_t gpio_debug;
|
||||
uint32_t mc_micro_code_feature;
|
||||
uint32_t highest_mclk;
|
||||
uint16_t acpi_vddci;
|
||||
uint8_t mvdd_high_index;
|
||||
uint8_t mvdd_low_index;
|
||||
bool dll_default_on;
|
||||
bool performance_request_registered;
|
||||
|
||||
/* ---- Low Power Features ---- */
|
||||
bool ulv_supported;
|
||||
|
||||
/* ---- CAC Stuff ---- */
|
||||
uint32_t cac_table_start;
|
||||
bool cac_configuration_required;
|
||||
bool driver_calculate_cac_leakage;
|
||||
bool cac_enabled;
|
||||
|
||||
/* ---- DPM2 Parameters ---- */
|
||||
uint32_t power_containment_features;
|
||||
bool enable_dte_feature;
|
||||
bool enable_tdc_limit_feature;
|
||||
bool enable_pkg_pwr_tracking_feature;
|
||||
bool disable_uvd_power_tune_feature;
|
||||
|
||||
|
||||
uint32_t dte_tj_offset;
|
||||
uint32_t fast_watermark_threshold;
|
||||
|
||||
/* ---- Phase Shedding ---- */
|
||||
bool vddc_phase_shed_control;
|
||||
|
||||
/* ---- DI/DT ---- */
|
||||
struct smu7_display_timing display_timing;
|
||||
|
||||
/* ---- Thermal Temperature Setting ---- */
|
||||
struct smu7_thermal_temperature_setting thermal_temp_setting;
|
||||
struct smu7_dpmlevel_enable_mask dpm_level_enable_mask;
|
||||
uint32_t need_update_smu7_dpm_table;
|
||||
uint32_t sclk_dpm_key_disabled;
|
||||
uint32_t mclk_dpm_key_disabled;
|
||||
uint32_t pcie_dpm_key_disabled;
|
||||
uint32_t min_engine_clocks;
|
||||
struct smu7_pcie_perf_range pcie_gen_performance;
|
||||
struct smu7_pcie_perf_range pcie_lane_performance;
|
||||
struct smu7_pcie_perf_range pcie_gen_power_saving;
|
||||
struct smu7_pcie_perf_range pcie_lane_power_saving;
|
||||
bool use_pcie_performance_levels;
|
||||
bool use_pcie_power_saving_levels;
|
||||
uint32_t mclk_activity_target;
|
||||
uint32_t mclk_dpm0_activity_target;
|
||||
uint32_t low_sclk_interrupt_threshold;
|
||||
uint32_t last_mclk_dpm_enable_mask;
|
||||
bool uvd_enabled;
|
||||
|
||||
/* ---- Power Gating States ---- */
|
||||
bool uvd_power_gated;
|
||||
bool vce_power_gated;
|
||||
bool samu_power_gated;
|
||||
bool need_long_memory_training;
|
||||
|
||||
/* Application power optimization parameters */
|
||||
bool update_up_hyst;
|
||||
bool update_down_hyst;
|
||||
uint32_t down_hyst;
|
||||
uint32_t up_hyst;
|
||||
uint32_t disable_dpm_mask;
|
||||
bool apply_optimized_settings;
|
||||
|
||||
uint32_t avfs_vdroop_override_setting;
|
||||
bool apply_avfs_cks_off_voltage;
|
||||
uint32_t frame_time_x2;
|
||||
uint16_t mem_latency_high;
|
||||
uint16_t mem_latency_low;
|
||||
};
|
||||
|
||||
/* To convert to Q8.8 format for firmware */
|
||||
#define SMU7_Q88_FORMAT_CONVERSION_UNIT 256
|
||||
|
||||
enum SMU7_I2CLineID {
|
||||
SMU7_I2CLineID_DDC1 = 0x90,
|
||||
SMU7_I2CLineID_DDC2 = 0x91,
|
||||
SMU7_I2CLineID_DDC3 = 0x92,
|
||||
SMU7_I2CLineID_DDC4 = 0x93,
|
||||
SMU7_I2CLineID_DDC5 = 0x94,
|
||||
SMU7_I2CLineID_DDC6 = 0x95,
|
||||
SMU7_I2CLineID_SCLSDA = 0x96,
|
||||
SMU7_I2CLineID_DDCVGA = 0x97
|
||||
};
|
||||
|
||||
#define SMU7_I2C_DDC1DATA 0
|
||||
#define SMU7_I2C_DDC1CLK 1
|
||||
#define SMU7_I2C_DDC2DATA 2
|
||||
#define SMU7_I2C_DDC2CLK 3
|
||||
#define SMU7_I2C_DDC3DATA 4
|
||||
#define SMU7_I2C_DDC3CLK 5
|
||||
#define SMU7_I2C_SDA 40
|
||||
#define SMU7_I2C_SCL 41
|
||||
#define SMU7_I2C_DDC4DATA 65
|
||||
#define SMU7_I2C_DDC4CLK 66
|
||||
#define SMU7_I2C_DDC5DATA 0x48
|
||||
#define SMU7_I2C_DDC5CLK 0x49
|
||||
#define SMU7_I2C_DDC6DATA 0x4a
|
||||
#define SMU7_I2C_DDC6CLK 0x4b
|
||||
#define SMU7_I2C_DDCVGADATA 0x4c
|
||||
#define SMU7_I2C_DDCVGACLK 0x4d
|
||||
|
||||
#define SMU7_UNUSED_GPIO_PIN 0x7F
|
||||
uint32_t smu7_get_xclk(struct pp_hwmgr *hwmgr);
|
||||
uint8_t smu7_get_sleep_divider_id_from_clock(uint32_t clock,
|
||||
uint32_t clock_insr);
|
||||
#endif
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
* Copyright 2015 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
#ifndef _SMU7_POWERTUNE_H
|
||||
#define _SMU7_POWERTUNE_H
|
||||
|
||||
#define DIDT_SQ_CTRL0__UNUSED_0_MASK 0xfffc0000
|
||||
#define DIDT_SQ_CTRL0__UNUSED_0__SHIFT 0x12
|
||||
#define DIDT_TD_CTRL0__UNUSED_0_MASK 0xfffc0000
|
||||
#define DIDT_TD_CTRL0__UNUSED_0__SHIFT 0x12
|
||||
#define DIDT_TCP_CTRL0__UNUSED_0_MASK 0xfffc0000
|
||||
#define DIDT_TCP_CTRL0__UNUSED_0__SHIFT 0x12
|
||||
#define DIDT_SQ_TUNING_CTRL__UNUSED_0_MASK 0xc0000000
|
||||
#define DIDT_SQ_TUNING_CTRL__UNUSED_0__SHIFT 0x0000001e
|
||||
#define DIDT_TD_TUNING_CTRL__UNUSED_0_MASK 0xc0000000
|
||||
#define DIDT_TD_TUNING_CTRL__UNUSED_0__SHIFT 0x0000001e
|
||||
#define DIDT_TCP_TUNING_CTRL__UNUSED_0_MASK 0xc0000000
|
||||
#define DIDT_TCP_TUNING_CTRL__UNUSED_0__SHIFT 0x0000001e
|
||||
|
||||
/* PowerContainment Features */
|
||||
#define POWERCONTAINMENT_FEATURE_DTE 0x00000001
|
||||
#define POWERCONTAINMENT_FEATURE_TDCLimit 0x00000002
|
||||
#define POWERCONTAINMENT_FEATURE_PkgPwrLimit 0x00000004
|
||||
|
||||
#define ixGC_CAC_CNTL 0x0000
|
||||
#define ixDIDT_SQ_STALL_CTRL 0x0004
|
||||
#define ixDIDT_SQ_TUNING_CTRL 0x0005
|
||||
#define ixDIDT_TD_STALL_CTRL 0x0044
|
||||
#define ixDIDT_TD_TUNING_CTRL 0x0045
|
||||
#define ixDIDT_TCP_STALL_CTRL 0x0064
|
||||
#define ixDIDT_TCP_TUNING_CTRL 0x0065
|
||||
|
||||
|
||||
int smu7_enable_smc_cac(struct pp_hwmgr *hwmgr);
|
||||
int smu7_disable_smc_cac(struct pp_hwmgr *hwmgr);
|
||||
int smu7_enable_power_containment(struct pp_hwmgr *hwmgr);
|
||||
int smu7_disable_power_containment(struct pp_hwmgr *hwmgr);
|
||||
int smu7_set_power_limit(struct pp_hwmgr *hwmgr, uint32_t n);
|
||||
int smu7_power_control_set_level(struct pp_hwmgr *hwmgr);
|
||||
int smu7_enable_didt_config(struct pp_hwmgr *hwmgr);
|
||||
int smu7_disable_didt_config(struct pp_hwmgr *hwmgr);
|
||||
#endif /* DGPU_POWERTUNE_H */
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
* Copyright 2016 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _SMU7_THERMAL_H_
|
||||
#define _SMU7_THERMAL_H_
|
||||
|
||||
#include "hwmgr.h"
|
||||
|
||||
#define SMU7_THERMAL_HIGH_ALERT_MASK 0x1
|
||||
#define SMU7_THERMAL_LOW_ALERT_MASK 0x2
|
||||
|
||||
#define SMU7_THERMAL_MINIMUM_TEMP_READING -256
|
||||
#define SMU7_THERMAL_MAXIMUM_TEMP_READING 255
|
||||
|
||||
#define SMU7_THERMAL_MINIMUM_ALERT_TEMP 0
|
||||
#define SMU7_THERMAL_MAXIMUM_ALERT_TEMP 255
|
||||
|
||||
#define FDO_PWM_MODE_STATIC 1
|
||||
#define FDO_PWM_MODE_STATIC_RPM 5
|
||||
|
||||
extern int smu7_thermal_get_temperature(struct pp_hwmgr *hwmgr);
|
||||
extern int smu7_thermal_stop_thermal_controller(struct pp_hwmgr *hwmgr);
|
||||
extern int smu7_fan_ctrl_get_fan_speed_info(struct pp_hwmgr *hwmgr, struct phm_fan_speed_info *fan_speed_info);
|
||||
extern int smu7_fan_ctrl_get_fan_speed_percent(struct pp_hwmgr *hwmgr, uint32_t *speed);
|
||||
extern int smu7_fan_ctrl_set_default_mode(struct pp_hwmgr *hwmgr);
|
||||
extern int smu7_fan_ctrl_set_static_mode(struct pp_hwmgr *hwmgr, uint32_t mode);
|
||||
extern int smu7_fan_ctrl_set_fan_speed_percent(struct pp_hwmgr *hwmgr, uint32_t speed);
|
||||
extern int smu7_fan_ctrl_reset_fan_speed_to_default(struct pp_hwmgr *hwmgr);
|
||||
extern int pp_smu7_thermal_initialize(struct pp_hwmgr *hwmgr);
|
||||
extern int smu7_thermal_ctrl_uninitialize_thermal_controller(struct pp_hwmgr *hwmgr);
|
||||
extern int smu7_fan_ctrl_set_fan_speed_rpm(struct pp_hwmgr *hwmgr, uint32_t speed);
|
||||
extern int smu7_fan_ctrl_get_fan_speed_rpm(struct pp_hwmgr *hwmgr, uint32_t *speed);
|
||||
extern int smu7_fan_ctrl_stop_smc_fan_control(struct pp_hwmgr *hwmgr);
|
||||
extern int smu7_thermal_enable_alert(struct pp_hwmgr *hwmgr);
|
||||
extern int smu7_thermal_disable_alert(struct pp_hwmgr *hwmgr);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
* Copyright 2014 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _PP_COMMON_H
|
||||
#define _PP_COMMON_H
|
||||
|
||||
#include "smu7_ppsmc.h"
|
||||
#include "cgs_common.h"
|
||||
|
||||
#include "smu/smu_7_1_3_d.h"
|
||||
#include "smu/smu_7_1_3_sh_mask.h"
|
||||
|
||||
|
||||
#include "smu74.h"
|
||||
#include "smu74_discrete.h"
|
||||
|
||||
#include "gmc/gmc_8_1_d.h"
|
||||
#include "gmc/gmc_8_1_sh_mask.h"
|
||||
|
||||
#include "bif/bif_5_0_d.h"
|
||||
#include "bif/bif_5_0_sh_mask.h"
|
||||
|
||||
|
||||
#include "bif/bif_5_0_d.h"
|
||||
#include "bif/bif_5_0_sh_mask.h"
|
||||
|
||||
#include "dce/dce_10_0_d.h"
|
||||
#include "dce/dce_10_0_sh_mask.h"
|
||||
|
||||
#include "gca/gfx_8_0_d.h"
|
||||
#include "gca/gfx_8_0_sh_mask.h"
|
||||
|
||||
#include "oss/oss_3_0_d.h"
|
||||
#include "oss/oss_3_0_sh_mask.h"
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,412 @@
|
||||
/*
|
||||
* Copyright 2015 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef DGPU_VI_PP_SMC_H
|
||||
#define DGPU_VI_PP_SMC_H
|
||||
|
||||
|
||||
#pragma pack(push, 1)
|
||||
|
||||
#define PPSMC_MSG_SetGBDroopSettings ((uint16_t) 0x305)
|
||||
|
||||
#define PPSMC_SWSTATE_FLAG_DC 0x01
|
||||
#define PPSMC_SWSTATE_FLAG_UVD 0x02
|
||||
#define PPSMC_SWSTATE_FLAG_VCE 0x04
|
||||
|
||||
#define PPSMC_THERMAL_PROTECT_TYPE_INTERNAL 0x00
|
||||
#define PPSMC_THERMAL_PROTECT_TYPE_EXTERNAL 0x01
|
||||
#define PPSMC_THERMAL_PROTECT_TYPE_NONE 0xff
|
||||
|
||||
#define PPSMC_SYSTEMFLAG_GPIO_DC 0x01
|
||||
#define PPSMC_SYSTEMFLAG_STEPVDDC 0x02
|
||||
#define PPSMC_SYSTEMFLAG_GDDR5 0x04
|
||||
|
||||
#define PPSMC_SYSTEMFLAG_DISABLE_BABYSTEP 0x08
|
||||
|
||||
#define PPSMC_SYSTEMFLAG_REGULATOR_HOT 0x10
|
||||
#define PPSMC_SYSTEMFLAG_REGULATOR_HOT_ANALOG 0x20
|
||||
|
||||
#define PPSMC_EXTRAFLAGS_AC2DC_ACTION_MASK 0x07
|
||||
#define PPSMC_EXTRAFLAGS_AC2DC_DONT_WAIT_FOR_VBLANK 0x08
|
||||
|
||||
#define PPSMC_EXTRAFLAGS_AC2DC_ACTION_GOTODPMLOWSTATE 0x00
|
||||
#define PPSMC_EXTRAFLAGS_AC2DC_ACTION_GOTOINITIALSTATE 0x01
|
||||
|
||||
|
||||
#define PPSMC_DPM2FLAGS_TDPCLMP 0x01
|
||||
#define PPSMC_DPM2FLAGS_PWRSHFT 0x02
|
||||
#define PPSMC_DPM2FLAGS_OCP 0x04
|
||||
|
||||
|
||||
#define PPSMC_DISPLAY_WATERMARK_LOW 0
|
||||
#define PPSMC_DISPLAY_WATERMARK_HIGH 1
|
||||
|
||||
|
||||
#define PPSMC_STATEFLAG_AUTO_PULSE_SKIP 0x01
|
||||
#define PPSMC_STATEFLAG_POWERBOOST 0x02
|
||||
#define PPSMC_STATEFLAG_PSKIP_ON_TDP_FAULT 0x04
|
||||
#define PPSMC_STATEFLAG_POWERSHIFT 0x08
|
||||
#define PPSMC_STATEFLAG_SLOW_READ_MARGIN 0x10
|
||||
#define PPSMC_STATEFLAG_DEEPSLEEP_THROTTLE 0x20
|
||||
#define PPSMC_STATEFLAG_DEEPSLEEP_BYPASS 0x40
|
||||
|
||||
|
||||
#define FDO_MODE_HARDWARE 0
|
||||
#define FDO_MODE_PIECE_WISE_LINEAR 1
|
||||
|
||||
enum FAN_CONTROL {
|
||||
FAN_CONTROL_FUZZY,
|
||||
FAN_CONTROL_TABLE
|
||||
};
|
||||
|
||||
|
||||
#define PPSMC_Result_OK ((uint16_t)0x01)
|
||||
#define PPSMC_Result_NoMore ((uint16_t)0x02)
|
||||
|
||||
#define PPSMC_Result_NotNow ((uint16_t)0x03)
|
||||
#define PPSMC_Result_Failed ((uint16_t)0xFF)
|
||||
#define PPSMC_Result_UnknownCmd ((uint16_t)0xFE)
|
||||
#define PPSMC_Result_UnknownVT ((uint16_t)0xFD)
|
||||
|
||||
typedef uint16_t PPSMC_Result;
|
||||
|
||||
#define PPSMC_isERROR(x) ((uint16_t)0x80 & (x))
|
||||
|
||||
|
||||
#define PPSMC_MSG_Halt ((uint16_t)0x10)
|
||||
#define PPSMC_MSG_Resume ((uint16_t)0x11)
|
||||
#define PPSMC_MSG_EnableDPMLevel ((uint16_t)0x12)
|
||||
#define PPSMC_MSG_ZeroLevelsDisabled ((uint16_t)0x13)
|
||||
#define PPSMC_MSG_OneLevelsDisabled ((uint16_t)0x14)
|
||||
#define PPSMC_MSG_TwoLevelsDisabled ((uint16_t)0x15)
|
||||
#define PPSMC_MSG_EnableThermalInterrupt ((uint16_t)0x16)
|
||||
#define PPSMC_MSG_RunningOnAC ((uint16_t)0x17)
|
||||
#define PPSMC_MSG_LevelUp ((uint16_t)0x18)
|
||||
#define PPSMC_MSG_LevelDown ((uint16_t)0x19)
|
||||
#define PPSMC_MSG_ResetDPMCounters ((uint16_t)0x1a)
|
||||
#define PPSMC_MSG_SwitchToSwState ((uint16_t)0x20)
|
||||
#define PPSMC_MSG_SwitchToSwStateLast ((uint16_t)0x3f)
|
||||
#define PPSMC_MSG_SwitchToInitialState ((uint16_t)0x40)
|
||||
#define PPSMC_MSG_NoForcedLevel ((uint16_t)0x41)
|
||||
#define PPSMC_MSG_ForceHigh ((uint16_t)0x42)
|
||||
#define PPSMC_MSG_ForceMediumOrHigh ((uint16_t)0x43)
|
||||
#define PPSMC_MSG_SwitchToMinimumPower ((uint16_t)0x51)
|
||||
#define PPSMC_MSG_ResumeFromMinimumPower ((uint16_t)0x52)
|
||||
#define PPSMC_MSG_EnableCac ((uint16_t)0x53)
|
||||
#define PPSMC_MSG_DisableCac ((uint16_t)0x54)
|
||||
#define PPSMC_DPMStateHistoryStart ((uint16_t)0x55)
|
||||
#define PPSMC_DPMStateHistoryStop ((uint16_t)0x56)
|
||||
#define PPSMC_CACHistoryStart ((uint16_t)0x57)
|
||||
#define PPSMC_CACHistoryStop ((uint16_t)0x58)
|
||||
#define PPSMC_TDPClampingActive ((uint16_t)0x59)
|
||||
#define PPSMC_TDPClampingInactive ((uint16_t)0x5A)
|
||||
#define PPSMC_StartFanControl ((uint16_t)0x5B)
|
||||
#define PPSMC_StopFanControl ((uint16_t)0x5C)
|
||||
#define PPSMC_NoDisplay ((uint16_t)0x5D)
|
||||
#define PPSMC_HasDisplay ((uint16_t)0x5E)
|
||||
#define PPSMC_MSG_UVDPowerOFF ((uint16_t)0x60)
|
||||
#define PPSMC_MSG_UVDPowerON ((uint16_t)0x61)
|
||||
#define PPSMC_MSG_EnableULV ((uint16_t)0x62)
|
||||
#define PPSMC_MSG_DisableULV ((uint16_t)0x63)
|
||||
#define PPSMC_MSG_EnterULV ((uint16_t)0x64)
|
||||
#define PPSMC_MSG_ExitULV ((uint16_t)0x65)
|
||||
#define PPSMC_PowerShiftActive ((uint16_t)0x6A)
|
||||
#define PPSMC_PowerShiftInactive ((uint16_t)0x6B)
|
||||
#define PPSMC_OCPActive ((uint16_t)0x6C)
|
||||
#define PPSMC_OCPInactive ((uint16_t)0x6D)
|
||||
#define PPSMC_CACLongTermAvgEnable ((uint16_t)0x6E)
|
||||
#define PPSMC_CACLongTermAvgDisable ((uint16_t)0x6F)
|
||||
#define PPSMC_MSG_InferredStateSweep_Start ((uint16_t)0x70)
|
||||
#define PPSMC_MSG_InferredStateSweep_Stop ((uint16_t)0x71)
|
||||
#define PPSMC_MSG_SwitchToLowestInfState ((uint16_t)0x72)
|
||||
#define PPSMC_MSG_SwitchToNonInfState ((uint16_t)0x73)
|
||||
#define PPSMC_MSG_AllStateSweep_Start ((uint16_t)0x74)
|
||||
#define PPSMC_MSG_AllStateSweep_Stop ((uint16_t)0x75)
|
||||
#define PPSMC_MSG_SwitchNextLowerInfState ((uint16_t)0x76)
|
||||
#define PPSMC_MSG_SwitchNextHigherInfState ((uint16_t)0x77)
|
||||
#define PPSMC_MSG_MclkRetrainingTest ((uint16_t)0x78)
|
||||
#define PPSMC_MSG_ForceTDPClamping ((uint16_t)0x79)
|
||||
#define PPSMC_MSG_CollectCAC_PowerCorreln ((uint16_t)0x7A)
|
||||
#define PPSMC_MSG_CollectCAC_WeightCalib ((uint16_t)0x7B)
|
||||
#define PPSMC_MSG_CollectCAC_SQonly ((uint16_t)0x7C)
|
||||
#define PPSMC_MSG_CollectCAC_TemperaturePwr ((uint16_t)0x7D)
|
||||
|
||||
#define PPSMC_MSG_ExtremitiesTest_Start ((uint16_t)0x7E)
|
||||
#define PPSMC_MSG_ExtremitiesTest_Stop ((uint16_t)0x7F)
|
||||
#define PPSMC_FlushDataCache ((uint16_t)0x80)
|
||||
#define PPSMC_FlushInstrCache ((uint16_t)0x81)
|
||||
|
||||
#define PPSMC_MSG_SetEnabledLevels ((uint16_t)0x82)
|
||||
#define PPSMC_MSG_SetForcedLevels ((uint16_t)0x83)
|
||||
|
||||
#define PPSMC_MSG_ResetToDefaults ((uint16_t)0x84)
|
||||
|
||||
#define PPSMC_MSG_SetForcedLevelsAndJump ((uint16_t)0x85)
|
||||
#define PPSMC_MSG_SetCACHistoryMode ((uint16_t)0x86)
|
||||
#define PPSMC_MSG_EnableDTE ((uint16_t)0x87)
|
||||
#define PPSMC_MSG_DisableDTE ((uint16_t)0x88)
|
||||
|
||||
#define PPSMC_MSG_SmcSpaceSetAddress ((uint16_t)0x89)
|
||||
#define PPSM_MSG_SmcSpaceWriteDWordInc ((uint16_t)0x8A)
|
||||
#define PPSM_MSG_SmcSpaceWriteWordInc ((uint16_t)0x8B)
|
||||
#define PPSM_MSG_SmcSpaceWriteByteInc ((uint16_t)0x8C)
|
||||
|
||||
#define PPSMC_MSG_BREAK ((uint16_t)0xF8)
|
||||
|
||||
#define PPSMC_MSG_Test ((uint16_t) 0x100)
|
||||
#define PPSMC_MSG_DPM_Voltage_Pwrmgt ((uint16_t) 0x101)
|
||||
#define PPSMC_MSG_DPM_Config ((uint16_t) 0x102)
|
||||
#define PPSMC_MSG_PM_Controller_Start ((uint16_t) 0x103)
|
||||
#define PPSMC_MSG_DPM_ForceState ((uint16_t) 0x104)
|
||||
#define PPSMC_MSG_PG_PowerDownSIMD ((uint16_t) 0x105)
|
||||
#define PPSMC_MSG_PG_PowerUpSIMD ((uint16_t) 0x106)
|
||||
#define PPSMC_MSG_PM_Controller_Stop ((uint16_t) 0x107)
|
||||
#define PPSMC_MSG_PG_SIMD_Config ((uint16_t) 0x108)
|
||||
#define PPSMC_MSG_Voltage_Cntl_Enable ((uint16_t) 0x109)
|
||||
#define PPSMC_MSG_Thermal_Cntl_Enable ((uint16_t) 0x10a)
|
||||
#define PPSMC_MSG_Reset_Service ((uint16_t) 0x10b)
|
||||
#define PPSMC_MSG_VCEPowerOFF ((uint16_t) 0x10e)
|
||||
#define PPSMC_MSG_VCEPowerON ((uint16_t) 0x10f)
|
||||
#define PPSMC_MSG_DPM_Disable_VCE_HS ((uint16_t) 0x110)
|
||||
#define PPSMC_MSG_DPM_Enable_VCE_HS ((uint16_t) 0x111)
|
||||
#define PPSMC_MSG_DPM_N_LevelsDisabled ((uint16_t) 0x112)
|
||||
#define PPSMC_MSG_DCEPowerOFF ((uint16_t) 0x113)
|
||||
#define PPSMC_MSG_DCEPowerON ((uint16_t) 0x114)
|
||||
#define PPSMC_MSG_PCIE_DDIPowerDown ((uint16_t) 0x117)
|
||||
#define PPSMC_MSG_PCIE_DDIPowerUp ((uint16_t) 0x118)
|
||||
#define PPSMC_MSG_PCIE_CascadePLLPowerDown ((uint16_t) 0x119)
|
||||
#define PPSMC_MSG_PCIE_CascadePLLPowerUp ((uint16_t) 0x11a)
|
||||
#define PPSMC_MSG_SYSPLLPowerOff ((uint16_t) 0x11b)
|
||||
#define PPSMC_MSG_SYSPLLPowerOn ((uint16_t) 0x11c)
|
||||
#define PPSMC_MSG_DCE_RemoveVoltageAdjustment ((uint16_t) 0x11d)
|
||||
#define PPSMC_MSG_DCE_AllowVoltageAdjustment ((uint16_t) 0x11e)
|
||||
#define PPSMC_MSG_DISPLAYPHYStatusNotify ((uint16_t) 0x11f)
|
||||
#define PPSMC_MSG_EnableBAPM ((uint16_t) 0x120)
|
||||
#define PPSMC_MSG_DisableBAPM ((uint16_t) 0x121)
|
||||
#define PPSMC_MSG_Spmi_Enable ((uint16_t) 0x122)
|
||||
#define PPSMC_MSG_Spmi_Timer ((uint16_t) 0x123)
|
||||
#define PPSMC_MSG_LCLK_DPM_Config ((uint16_t) 0x124)
|
||||
#define PPSMC_MSG_VddNB_Request ((uint16_t) 0x125)
|
||||
#define PPSMC_MSG_PCIE_DDIPhyPowerDown ((uint32_t) 0x126)
|
||||
#define PPSMC_MSG_PCIE_DDIPhyPowerUp ((uint32_t) 0x127)
|
||||
#define PPSMC_MSG_MCLKDPM_Config ((uint16_t) 0x128)
|
||||
|
||||
#define PPSMC_MSG_UVDDPM_Config ((uint16_t) 0x129)
|
||||
#define PPSMC_MSG_VCEDPM_Config ((uint16_t) 0x12A)
|
||||
#define PPSMC_MSG_ACPDPM_Config ((uint16_t) 0x12B)
|
||||
#define PPSMC_MSG_SAMUDPM_Config ((uint16_t) 0x12C)
|
||||
#define PPSMC_MSG_UVDDPM_SetEnabledMask ((uint16_t) 0x12D)
|
||||
#define PPSMC_MSG_VCEDPM_SetEnabledMask ((uint16_t) 0x12E)
|
||||
#define PPSMC_MSG_ACPDPM_SetEnabledMask ((uint16_t) 0x12F)
|
||||
#define PPSMC_MSG_SAMUDPM_SetEnabledMask ((uint16_t) 0x130)
|
||||
#define PPSMC_MSG_MCLKDPM_ForceState ((uint16_t) 0x131)
|
||||
#define PPSMC_MSG_MCLKDPM_NoForcedLevel ((uint16_t) 0x132)
|
||||
#define PPSMC_MSG_Thermal_Cntl_Disable ((uint16_t) 0x133)
|
||||
#define PPSMC_MSG_SetTDPLimit ((uint16_t) 0x134)
|
||||
#define PPSMC_MSG_Voltage_Cntl_Disable ((uint16_t) 0x135)
|
||||
#define PPSMC_MSG_PCIeDPM_Enable ((uint16_t) 0x136)
|
||||
#define PPSMC_MSG_ACPPowerOFF ((uint16_t) 0x137)
|
||||
#define PPSMC_MSG_ACPPowerON ((uint16_t) 0x138)
|
||||
#define PPSMC_MSG_SAMPowerOFF ((uint16_t) 0x139)
|
||||
#define PPSMC_MSG_SAMPowerON ((uint16_t) 0x13a)
|
||||
#define PPSMC_MSG_SDMAPowerOFF ((uint16_t) 0x13b)
|
||||
#define PPSMC_MSG_SDMAPowerON ((uint16_t) 0x13c)
|
||||
#define PPSMC_MSG_PCIeDPM_Disable ((uint16_t) 0x13d)
|
||||
#define PPSMC_MSG_IOMMUPowerOFF ((uint16_t) 0x13e)
|
||||
#define PPSMC_MSG_IOMMUPowerON ((uint16_t) 0x13f)
|
||||
#define PPSMC_MSG_NBDPM_Enable ((uint16_t) 0x140)
|
||||
#define PPSMC_MSG_NBDPM_Disable ((uint16_t) 0x141)
|
||||
#define PPSMC_MSG_NBDPM_ForceNominal ((uint16_t) 0x142)
|
||||
#define PPSMC_MSG_NBDPM_ForcePerformance ((uint16_t) 0x143)
|
||||
#define PPSMC_MSG_NBDPM_UnForce ((uint16_t) 0x144)
|
||||
#define PPSMC_MSG_SCLKDPM_SetEnabledMask ((uint16_t) 0x145)
|
||||
#define PPSMC_MSG_MCLKDPM_SetEnabledMask ((uint16_t) 0x146)
|
||||
#define PPSMC_MSG_PCIeDPM_ForceLevel ((uint16_t) 0x147)
|
||||
#define PPSMC_MSG_PCIeDPM_UnForceLevel ((uint16_t) 0x148)
|
||||
#define PPSMC_MSG_EnableACDCGPIOInterrupt ((uint16_t) 0x149)
|
||||
#define PPSMC_MSG_EnableVRHotGPIOInterrupt ((uint16_t) 0x14a)
|
||||
#define PPSMC_MSG_SwitchToAC ((uint16_t) 0x14b)
|
||||
#define PPSMC_MSG_XDMAPowerOFF ((uint16_t) 0x14c)
|
||||
#define PPSMC_MSG_XDMAPowerON ((uint16_t) 0x14d)
|
||||
|
||||
#define PPSMC_MSG_DPM_Enable ((uint16_t) 0x14e)
|
||||
#define PPSMC_MSG_DPM_Disable ((uint16_t) 0x14f)
|
||||
#define PPSMC_MSG_MCLKDPM_Enable ((uint16_t) 0x150)
|
||||
#define PPSMC_MSG_MCLKDPM_Disable ((uint16_t) 0x151)
|
||||
#define PPSMC_MSG_LCLKDPM_Enable ((uint16_t) 0x152)
|
||||
#define PPSMC_MSG_LCLKDPM_Disable ((uint16_t) 0x153)
|
||||
#define PPSMC_MSG_UVDDPM_Enable ((uint16_t) 0x154)
|
||||
#define PPSMC_MSG_UVDDPM_Disable ((uint16_t) 0x155)
|
||||
#define PPSMC_MSG_SAMUDPM_Enable ((uint16_t) 0x156)
|
||||
#define PPSMC_MSG_SAMUDPM_Disable ((uint16_t) 0x157)
|
||||
#define PPSMC_MSG_ACPDPM_Enable ((uint16_t) 0x158)
|
||||
#define PPSMC_MSG_ACPDPM_Disable ((uint16_t) 0x159)
|
||||
#define PPSMC_MSG_VCEDPM_Enable ((uint16_t) 0x15a)
|
||||
#define PPSMC_MSG_VCEDPM_Disable ((uint16_t) 0x15b)
|
||||
#define PPSMC_MSG_LCLKDPM_SetEnabledMask ((uint16_t) 0x15c)
|
||||
#define PPSMC_MSG_DPM_FPS_Mode ((uint16_t) 0x15d)
|
||||
#define PPSMC_MSG_DPM_Activity_Mode ((uint16_t) 0x15e)
|
||||
#define PPSMC_MSG_VddC_Request ((uint16_t) 0x15f)
|
||||
#define PPSMC_MSG_MCLKDPM_GetEnabledMask ((uint16_t) 0x160)
|
||||
#define PPSMC_MSG_LCLKDPM_GetEnabledMask ((uint16_t) 0x161)
|
||||
#define PPSMC_MSG_SCLKDPM_GetEnabledMask ((uint16_t) 0x162)
|
||||
#define PPSMC_MSG_UVDDPM_GetEnabledMask ((uint16_t) 0x163)
|
||||
#define PPSMC_MSG_SAMUDPM_GetEnabledMask ((uint16_t) 0x164)
|
||||
#define PPSMC_MSG_ACPDPM_GetEnabledMask ((uint16_t) 0x165)
|
||||
#define PPSMC_MSG_VCEDPM_GetEnabledMask ((uint16_t) 0x166)
|
||||
#define PPSMC_MSG_PCIeDPM_SetEnabledMask ((uint16_t) 0x167)
|
||||
#define PPSMC_MSG_PCIeDPM_GetEnabledMask ((uint16_t) 0x168)
|
||||
#define PPSMC_MSG_TDCLimitEnable ((uint16_t) 0x169)
|
||||
#define PPSMC_MSG_TDCLimitDisable ((uint16_t) 0x16a)
|
||||
#define PPSMC_MSG_DPM_AutoRotate_Mode ((uint16_t) 0x16b)
|
||||
#define PPSMC_MSG_DISPCLK_FROM_FCH ((uint16_t) 0x16c)
|
||||
#define PPSMC_MSG_DISPCLK_FROM_DFS ((uint16_t) 0x16d)
|
||||
#define PPSMC_MSG_DPREFCLK_FROM_FCH ((uint16_t) 0x16e)
|
||||
#define PPSMC_MSG_DPREFCLK_FROM_DFS ((uint16_t) 0x16f)
|
||||
#define PPSMC_MSG_PmStatusLogStart ((uint16_t) 0x170)
|
||||
#define PPSMC_MSG_PmStatusLogSample ((uint16_t) 0x171)
|
||||
#define PPSMC_MSG_SCLK_AutoDPM_ON ((uint16_t) 0x172)
|
||||
#define PPSMC_MSG_MCLK_AutoDPM_ON ((uint16_t) 0x173)
|
||||
#define PPSMC_MSG_LCLK_AutoDPM_ON ((uint16_t) 0x174)
|
||||
#define PPSMC_MSG_UVD_AutoDPM_ON ((uint16_t) 0x175)
|
||||
#define PPSMC_MSG_SAMU_AutoDPM_ON ((uint16_t) 0x176)
|
||||
#define PPSMC_MSG_ACP_AutoDPM_ON ((uint16_t) 0x177)
|
||||
#define PPSMC_MSG_VCE_AutoDPM_ON ((uint16_t) 0x178)
|
||||
#define PPSMC_MSG_PCIe_AutoDPM_ON ((uint16_t) 0x179)
|
||||
#define PPSMC_MSG_MASTER_AutoDPM_ON ((uint16_t) 0x17a)
|
||||
#define PPSMC_MSG_MASTER_AutoDPM_OFF ((uint16_t) 0x17b)
|
||||
#define PPSMC_MSG_DYNAMICDISPPHYPOWER ((uint16_t) 0x17c)
|
||||
#define PPSMC_MSG_CAC_COLLECTION_ON ((uint16_t) 0x17d)
|
||||
#define PPSMC_MSG_CAC_COLLECTION_OFF ((uint16_t) 0x17e)
|
||||
#define PPSMC_MSG_CAC_CORRELATION_ON ((uint16_t) 0x17f)
|
||||
#define PPSMC_MSG_CAC_CORRELATION_OFF ((uint16_t) 0x180)
|
||||
#define PPSMC_MSG_PM_STATUS_TO_DRAM_ON ((uint16_t) 0x181)
|
||||
#define PPSMC_MSG_PM_STATUS_TO_DRAM_OFF ((uint16_t) 0x182)
|
||||
#define PPSMC_MSG_ALLOW_LOWSCLK_INTERRUPT ((uint16_t) 0x184)
|
||||
#define PPSMC_MSG_PkgPwrLimitEnable ((uint16_t) 0x185)
|
||||
#define PPSMC_MSG_PkgPwrLimitDisable ((uint16_t) 0x186)
|
||||
#define PPSMC_MSG_PkgPwrSetLimit ((uint16_t) 0x187)
|
||||
#define PPSMC_MSG_OverDriveSetTargetTdp ((uint16_t) 0x188)
|
||||
#define PPSMC_MSG_SCLKDPM_FreezeLevel ((uint16_t) 0x189)
|
||||
#define PPSMC_MSG_SCLKDPM_UnfreezeLevel ((uint16_t) 0x18A)
|
||||
#define PPSMC_MSG_MCLKDPM_FreezeLevel ((uint16_t) 0x18B)
|
||||
#define PPSMC_MSG_MCLKDPM_UnfreezeLevel ((uint16_t) 0x18C)
|
||||
#define PPSMC_MSG_START_DRAM_LOGGING ((uint16_t) 0x18D)
|
||||
#define PPSMC_MSG_STOP_DRAM_LOGGING ((uint16_t) 0x18E)
|
||||
#define PPSMC_MSG_MASTER_DeepSleep_ON ((uint16_t) 0x18F)
|
||||
#define PPSMC_MSG_MASTER_DeepSleep_OFF ((uint16_t) 0x190)
|
||||
#define PPSMC_MSG_Remove_DC_Clamp ((uint16_t) 0x191)
|
||||
#define PPSMC_MSG_DisableACDCGPIOInterrupt ((uint16_t) 0x192)
|
||||
#define PPSMC_MSG_OverrideVoltageControl_SetVddc ((uint16_t) 0x193)
|
||||
#define PPSMC_MSG_OverrideVoltageControl_SetVddci ((uint16_t) 0x194)
|
||||
#define PPSMC_MSG_SetVidOffset_1 ((uint16_t) 0x195)
|
||||
#define PPSMC_MSG_SetVidOffset_2 ((uint16_t) 0x207)
|
||||
#define PPSMC_MSG_GetVidOffset_1 ((uint16_t) 0x196)
|
||||
#define PPSMC_MSG_GetVidOffset_2 ((uint16_t) 0x208)
|
||||
#define PPSMC_MSG_THERMAL_OVERDRIVE_Enable ((uint16_t) 0x197)
|
||||
#define PPSMC_MSG_THERMAL_OVERDRIVE_Disable ((uint16_t) 0x198)
|
||||
#define PPSMC_MSG_SetTjMax ((uint16_t) 0x199)
|
||||
#define PPSMC_MSG_SetFanPwmMax ((uint16_t) 0x19A)
|
||||
#define PPSMC_MSG_WaitForMclkSwitchFinish ((uint16_t) 0x19B)
|
||||
#define PPSMC_MSG_ENABLE_THERMAL_DPM ((uint16_t) 0x19C)
|
||||
#define PPSMC_MSG_DISABLE_THERMAL_DPM ((uint16_t) 0x19D)
|
||||
|
||||
#define PPSMC_MSG_API_GetSclkFrequency ((uint16_t) 0x200)
|
||||
#define PPSMC_MSG_API_GetMclkFrequency ((uint16_t) 0x201)
|
||||
#define PPSMC_MSG_API_GetSclkBusy ((uint16_t) 0x202)
|
||||
#define PPSMC_MSG_API_GetMclkBusy ((uint16_t) 0x203)
|
||||
#define PPSMC_MSG_API_GetAsicPower ((uint16_t) 0x204)
|
||||
#define PPSMC_MSG_SetFanRpmMax ((uint16_t) 0x205)
|
||||
#define PPSMC_MSG_SetFanSclkTarget ((uint16_t) 0x206)
|
||||
#define PPSMC_MSG_SetFanMinPwm ((uint16_t) 0x209)
|
||||
#define PPSMC_MSG_SetFanTemperatureTarget ((uint16_t) 0x20A)
|
||||
|
||||
#define PPSMC_MSG_BACO_StartMonitor ((uint16_t) 0x240)
|
||||
#define PPSMC_MSG_BACO_Cancel ((uint16_t) 0x241)
|
||||
#define PPSMC_MSG_EnableVddGfx ((uint16_t) 0x242)
|
||||
#define PPSMC_MSG_DisableVddGfx ((uint16_t) 0x243)
|
||||
#define PPSMC_MSG_UcodeAddressLow ((uint16_t) 0x244)
|
||||
#define PPSMC_MSG_UcodeAddressHigh ((uint16_t) 0x245)
|
||||
#define PPSMC_MSG_UcodeLoadStatus ((uint16_t) 0x246)
|
||||
|
||||
#define PPSMC_MSG_DRV_DRAM_ADDR_HI ((uint16_t) 0x250)
|
||||
#define PPSMC_MSG_DRV_DRAM_ADDR_LO ((uint16_t) 0x251)
|
||||
#define PPSMC_MSG_SMU_DRAM_ADDR_HI ((uint16_t) 0x252)
|
||||
#define PPSMC_MSG_SMU_DRAM_ADDR_LO ((uint16_t) 0x253)
|
||||
#define PPSMC_MSG_LoadUcodes ((uint16_t) 0x254)
|
||||
#define PPSMC_MSG_PowerStateNotify ((uint16_t) 0x255)
|
||||
#define PPSMC_MSG_COND_EXEC_DRAM_ADDR_HI ((uint16_t) 0x256)
|
||||
#define PPSMC_MSG_COND_EXEC_DRAM_ADDR_LO ((uint16_t) 0x257)
|
||||
#define PPSMC_MSG_VBIOS_DRAM_ADDR_HI ((uint16_t) 0x258)
|
||||
#define PPSMC_MSG_VBIOS_DRAM_ADDR_LO ((uint16_t) 0x259)
|
||||
#define PPSMC_MSG_LoadVBios ((uint16_t) 0x25A)
|
||||
#define PPSMC_MSG_GetUcodeVersion ((uint16_t) 0x25B)
|
||||
#define DMCUSMC_MSG_PSREntry ((uint16_t) 0x25C)
|
||||
#define DMCUSMC_MSG_PSRExit ((uint16_t) 0x25D)
|
||||
#define PPSMC_MSG_EnableClockGatingFeature ((uint16_t) 0x260)
|
||||
#define PPSMC_MSG_DisableClockGatingFeature ((uint16_t) 0x261)
|
||||
#define PPSMC_MSG_IsDeviceRunning ((uint16_t) 0x262)
|
||||
#define PPSMC_MSG_LoadMetaData ((uint16_t) 0x263)
|
||||
#define PPSMC_MSG_TMON_AutoCaliberate_Enable ((uint16_t) 0x264)
|
||||
#define PPSMC_MSG_TMON_AutoCaliberate_Disable ((uint16_t) 0x265)
|
||||
#define PPSMC_MSG_GetTelemetry1Slope ((uint16_t) 0x266)
|
||||
#define PPSMC_MSG_GetTelemetry1Offset ((uint16_t) 0x267)
|
||||
#define PPSMC_MSG_GetTelemetry2Slope ((uint16_t) 0x268)
|
||||
#define PPSMC_MSG_GetTelemetry2Offset ((uint16_t) 0x269)
|
||||
#define PPSMC_MSG_EnableAvfs ((uint16_t) 0x26A)
|
||||
#define PPSMC_MSG_DisableAvfs ((uint16_t) 0x26B)
|
||||
|
||||
#define PPSMC_MSG_PerformBtc ((uint16_t) 0x26C)
|
||||
#define PPSMC_MSG_VftTableIsValid ((uint16_t) 0x275)
|
||||
#define PPSMC_MSG_UseNewGPIOScheme ((uint16_t) 0x277)
|
||||
#define PPSMC_MSG_GetEnabledPsm ((uint16_t) 0x400)
|
||||
#define PPSMC_MSG_AgmStartPsm ((uint16_t) 0x401)
|
||||
#define PPSMC_MSG_AgmReadPsm ((uint16_t) 0x402)
|
||||
#define PPSMC_MSG_AgmResetPsm ((uint16_t) 0x403)
|
||||
#define PPSMC_MSG_ReadVftCell ((uint16_t) 0x404)
|
||||
|
||||
#define PPSMC_MSG_GFX_CU_PG_ENABLE ((uint16_t) 0x280)
|
||||
#define PPSMC_MSG_GFX_CU_PG_DISABLE ((uint16_t) 0x281)
|
||||
#define PPSMC_MSG_GetCurrPkgPwr ((uint16_t) 0x282)
|
||||
|
||||
#define PPSMC_MSG_SetGpuPllDfsForSclk ((uint16_t) 0x300)
|
||||
#define PPSMC_MSG_Didt_Block_Function ((uint16_t) 0x301)
|
||||
|
||||
#define PPSMC_MSG_SetVBITimeout ((uint16_t) 0x306)
|
||||
|
||||
#define PPSMC_MSG_SecureSRBMWrite ((uint16_t) 0x600)
|
||||
#define PPSMC_MSG_SecureSRBMRead ((uint16_t) 0x601)
|
||||
#define PPSMC_MSG_SetAddress ((uint16_t) 0x800)
|
||||
#define PPSMC_MSG_GetData ((uint16_t) 0x801)
|
||||
#define PPSMC_MSG_SetData ((uint16_t) 0x802)
|
||||
|
||||
typedef uint16_t PPSMC_Msg;
|
||||
|
||||
#define PPSMC_EVENT_STATUS_THERMAL 0x00000001
|
||||
#define PPSMC_EVENT_STATUS_REGULATORHOT 0x00000002
|
||||
#define PPSMC_EVENT_STATUS_DC 0x00000004
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user