Merge branch 'drm-next-4.10' of git://people.freedesktop.org/~agd5f/linux into drm-next
- lots of code cleanup - lots of bug fixes - expose rpm based fan info via hwmon - lots of clock and powergating fixes - SI register header cleanup and conversion to common format used by newer asics * 'drm-next-4.10' of git://people.freedesktop.org/~agd5f/linux: (54 commits) drm/amdgpu: drop is_display_hung from display funcs drm/amdgpu/uvd: reduce IB parsing overhead on UVD5+ (v2) drm/amdgpu/uvd: consolidate code for fetching addr from ctx drm/amdgpu: Disable DPM in virtualization drm/amdgpu: use AMDGPU_GEM_CREATE_VRAM_CLEARED for VM PD/PTs (v2) drm/amdgpu: improve AMDGPU_GEM_CREATE_VRAM_CLEARED handling (v2) drm/amdgpu: fix error handling in amdgpu_bo_create_restricted drm/amdgpu: fix amdgpu_fill_buffer (v2) drm/amdgpu: remove amdgpu_irq_get_delayed amdgpu: Wrap dev_err() calls on vm faults with printk_ratelimit() amdgpu: Use dev_err() over vanilla printk() in vm_decode_fault() drm/amd/amdgpu: port of DCE v6 to new headers (v3) drm/amdgpu: cleanup unused iterator members for sdma v2.4 drm/amdgpu: cleanup unused iterator members for sdma v3 drm/amdgpu:impl vgt_flush for VI(V5) drm/amdgpu: enable uvd mgcg for Fiji. drm/amdgpu: refine cz uvd clock gate logic. drm/amdgpu: change log level to KERN_INFO in ci_dpm.c drm/amdgpu: always un-gate UVD REGS path. drm/amdgpu/sdma: fix typo in packet setup ...
This commit is contained in:
@@ -41,7 +41,7 @@
|
||||
#define PP_CHECK_HW(hwmgr) \
|
||||
do { \
|
||||
if ((hwmgr) == NULL || (hwmgr)->hwmgr_func == NULL) \
|
||||
return -EINVAL; \
|
||||
return 0; \
|
||||
} while (0)
|
||||
|
||||
static int pp_early_init(void *handle)
|
||||
@@ -115,6 +115,7 @@ static int pp_hw_init(void *handle)
|
||||
struct pp_instance *pp_handle;
|
||||
struct pp_smumgr *smumgr;
|
||||
struct pp_eventmgr *eventmgr;
|
||||
struct pp_hwmgr *hwmgr;
|
||||
int ret = 0;
|
||||
|
||||
if (handle == NULL)
|
||||
@@ -122,6 +123,7 @@ static int pp_hw_init(void *handle)
|
||||
|
||||
pp_handle = (struct pp_instance *)handle;
|
||||
smumgr = pp_handle->smu_mgr;
|
||||
hwmgr = pp_handle->hwmgr;
|
||||
|
||||
if (smumgr == NULL || smumgr->smumgr_funcs == NULL ||
|
||||
smumgr->smumgr_funcs->smu_init == NULL ||
|
||||
@@ -141,9 +143,11 @@ static int pp_hw_init(void *handle)
|
||||
return ret;
|
||||
}
|
||||
|
||||
hw_init_power_state_table(pp_handle->hwmgr);
|
||||
eventmgr = pp_handle->eventmgr;
|
||||
PP_CHECK_HW(hwmgr);
|
||||
|
||||
hw_init_power_state_table(hwmgr);
|
||||
|
||||
eventmgr = pp_handle->eventmgr;
|
||||
if (eventmgr == NULL || eventmgr->pp_eventmgr_init == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
@@ -243,7 +247,9 @@ static int pp_suspend(void *handle)
|
||||
|
||||
pp_handle = (struct pp_instance *)handle;
|
||||
eventmgr = pp_handle->eventmgr;
|
||||
pem_handle_event(eventmgr, AMD_PP_EVENT_SUSPEND, &event_data);
|
||||
|
||||
if (eventmgr != NULL)
|
||||
pem_handle_event(eventmgr, AMD_PP_EVENT_SUSPEND, &event_data);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -273,7 +279,8 @@ static int pp_resume(void *handle)
|
||||
}
|
||||
|
||||
eventmgr = pp_handle->eventmgr;
|
||||
pem_handle_event(eventmgr, AMD_PP_EVENT_RESUME, &event_data);
|
||||
if (eventmgr != NULL)
|
||||
pem_handle_event(eventmgr, AMD_PP_EVENT_RESUME, &event_data);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -340,8 +347,7 @@ static enum amd_dpm_forced_level pp_dpm_get_performance_level(
|
||||
|
||||
hwmgr = ((struct pp_instance *)handle)->hwmgr;
|
||||
|
||||
if (hwmgr == NULL)
|
||||
return -EINVAL;
|
||||
PP_CHECK_HW(hwmgr);
|
||||
|
||||
return (((struct pp_instance *)handle)->hwmgr->dpm_level);
|
||||
}
|
||||
@@ -448,6 +454,9 @@ static int pp_dpm_dispatch_tasks(void *handle, enum amd_pp_event event_id,
|
||||
if (pp_handle == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
if (pp_handle->eventmgr == NULL)
|
||||
return 0;
|
||||
|
||||
switch (event_id) {
|
||||
case AMD_PP_EVENT_DISPLAY_CONFIG_CHANGE:
|
||||
ret = pem_handle_event(pp_handle->eventmgr, event_id, &data);
|
||||
@@ -582,6 +591,23 @@ static int pp_dpm_get_fan_speed_percent(void *handle, uint32_t *speed)
|
||||
return hwmgr->hwmgr_func->get_fan_speed_percent(hwmgr, speed);
|
||||
}
|
||||
|
||||
static int pp_dpm_get_fan_speed_rpm(void *handle, uint32_t *rpm)
|
||||
{
|
||||
struct pp_hwmgr *hwmgr;
|
||||
|
||||
if (handle == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
hwmgr = ((struct pp_instance *)handle)->hwmgr;
|
||||
|
||||
PP_CHECK_HW(hwmgr);
|
||||
|
||||
if (hwmgr->hwmgr_func->get_fan_speed_rpm == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
return hwmgr->hwmgr_func->get_fan_speed_rpm(hwmgr, rpm);
|
||||
}
|
||||
|
||||
static int pp_dpm_get_temperature(void *handle)
|
||||
{
|
||||
struct pp_hwmgr *hwmgr;
|
||||
@@ -852,6 +878,7 @@ const struct amd_powerplay_funcs pp_dpm_funcs = {
|
||||
.get_fan_control_mode = pp_dpm_get_fan_control_mode,
|
||||
.set_fan_speed_percent = pp_dpm_set_fan_speed_percent,
|
||||
.get_fan_speed_percent = pp_dpm_get_fan_speed_percent,
|
||||
.get_fan_speed_rpm = pp_dpm_get_fan_speed_rpm,
|
||||
.get_pp_num_states = pp_dpm_get_pp_num_states,
|
||||
.get_pp_table = pp_dpm_get_pp_table,
|
||||
.set_pp_table = pp_dpm_set_pp_table,
|
||||
@@ -881,6 +908,13 @@ static int amd_pp_instance_init(struct amd_pp_init *pp_init,
|
||||
if (ret)
|
||||
goto fail_smum;
|
||||
|
||||
|
||||
amd_pp->pp_handle = handle;
|
||||
|
||||
if ((amdgpu_dpm == 0)
|
||||
|| cgs_is_virtualization_enabled(pp_init->device))
|
||||
return 0;
|
||||
|
||||
ret = hwmgr_init(pp_init, handle);
|
||||
if (ret)
|
||||
goto fail_hwmgr;
|
||||
@@ -889,7 +923,6 @@ static int amd_pp_instance_init(struct amd_pp_init *pp_init,
|
||||
if (ret)
|
||||
goto fail_eventmgr;
|
||||
|
||||
amd_pp->pp_handle = handle;
|
||||
return 0;
|
||||
|
||||
fail_eventmgr:
|
||||
@@ -908,12 +941,13 @@ static int amd_pp_instance_fini(void *handle)
|
||||
if (instance == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
eventmgr_fini(instance->eventmgr);
|
||||
|
||||
hwmgr_fini(instance->hwmgr);
|
||||
if ((amdgpu_dpm != 0)
|
||||
&& !cgs_is_virtualization_enabled(instance->smu_mgr->device)) {
|
||||
eventmgr_fini(instance->eventmgr);
|
||||
hwmgr_fini(instance->hwmgr);
|
||||
}
|
||||
|
||||
smum_fini(instance->smu_mgr);
|
||||
|
||||
kfree(handle);
|
||||
return 0;
|
||||
}
|
||||
@@ -972,6 +1006,10 @@ int amd_powerplay_reset(void *handle)
|
||||
|
||||
hw_init_power_state_table(instance->hwmgr);
|
||||
|
||||
if ((amdgpu_dpm == 0)
|
||||
|| cgs_is_virtualization_enabled(instance->smu_mgr->device))
|
||||
return 0;
|
||||
|
||||
if (eventmgr == NULL || eventmgr->pp_eventmgr_init == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
@@ -993,6 +1031,8 @@ int amd_powerplay_display_configuration_change(void *handle,
|
||||
|
||||
hwmgr = ((struct pp_instance *)handle)->hwmgr;
|
||||
|
||||
PP_CHECK_HW(hwmgr);
|
||||
|
||||
phm_store_dal_configuration_data(hwmgr, display_config);
|
||||
|
||||
return 0;
|
||||
@@ -1010,6 +1050,8 @@ int amd_powerplay_get_display_power_level(void *handle,
|
||||
|
||||
hwmgr = ((struct pp_instance *)handle)->hwmgr;
|
||||
|
||||
PP_CHECK_HW(hwmgr);
|
||||
|
||||
return phm_get_dal_power_level(hwmgr, output);
|
||||
}
|
||||
|
||||
@@ -1027,6 +1069,8 @@ int amd_powerplay_get_current_clocks(void *handle,
|
||||
|
||||
hwmgr = ((struct pp_instance *)handle)->hwmgr;
|
||||
|
||||
PP_CHECK_HW(hwmgr);
|
||||
|
||||
phm_get_dal_power_level(hwmgr, &simple_clocks);
|
||||
|
||||
if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_PowerContainment)) {
|
||||
@@ -1071,6 +1115,8 @@ int amd_powerplay_get_clock_by_type(void *handle, enum amd_pp_clock_type type, s
|
||||
|
||||
hwmgr = ((struct pp_instance *)handle)->hwmgr;
|
||||
|
||||
PP_CHECK_HW(hwmgr);
|
||||
|
||||
result = phm_get_clock_by_type(hwmgr, type, clocks);
|
||||
|
||||
return result;
|
||||
@@ -1089,6 +1135,8 @@ int amd_powerplay_get_display_mode_validation_clocks(void *handle,
|
||||
|
||||
hwmgr = ((struct pp_instance *)handle)->hwmgr;
|
||||
|
||||
PP_CHECK_HW(hwmgr);
|
||||
|
||||
if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_DynamicPatchPowerState))
|
||||
result = phm_get_max_high_clocks(hwmgr, clocks);
|
||||
|
||||
|
@@ -169,7 +169,7 @@ int cz_dpm_powergate_uvd(struct pp_hwmgr *hwmgr, bool bgate)
|
||||
if (bgate) {
|
||||
cgs_set_clockgating_state(hwmgr->device,
|
||||
AMD_IP_BLOCK_TYPE_UVD,
|
||||
AMD_CG_STATE_UNGATE);
|
||||
AMD_CG_STATE_GATE);
|
||||
cgs_set_powergating_state(hwmgr->device,
|
||||
AMD_IP_BLOCK_TYPE_UVD,
|
||||
AMD_PG_STATE_GATE);
|
||||
@@ -182,7 +182,7 @@ int cz_dpm_powergate_uvd(struct pp_hwmgr *hwmgr, bool bgate)
|
||||
AMD_CG_STATE_UNGATE);
|
||||
cgs_set_clockgating_state(hwmgr->device,
|
||||
AMD_IP_BLOCK_TYPE_UVD,
|
||||
AMD_PG_STATE_GATE);
|
||||
AMD_PG_STATE_UNGATE);
|
||||
cz_dpm_update_uvd_dpm(hwmgr, false);
|
||||
}
|
||||
|
||||
|
@@ -80,20 +80,17 @@ int hwmgr_init(struct amd_pp_init *pp_init, struct pp_instance *handle)
|
||||
switch (hwmgr->chip_id) {
|
||||
case CHIP_TOPAZ:
|
||||
topaz_set_asic_special_caps(hwmgr);
|
||||
hwmgr->feature_mask &= ~(PP_SMC_VOLTAGE_CONTROL_MASK |
|
||||
PP_VBI_TIME_SUPPORT_MASK |
|
||||
hwmgr->feature_mask &= ~ (PP_VBI_TIME_SUPPORT_MASK |
|
||||
PP_ENABLE_GFX_CG_THRU_SMU);
|
||||
hwmgr->pp_table_version = PP_TABLE_V0;
|
||||
break;
|
||||
case CHIP_TONGA:
|
||||
tonga_set_asic_special_caps(hwmgr);
|
||||
hwmgr->feature_mask &= ~(PP_SMC_VOLTAGE_CONTROL_MASK |
|
||||
PP_VBI_TIME_SUPPORT_MASK);
|
||||
hwmgr->feature_mask &= ~PP_VBI_TIME_SUPPORT_MASK;
|
||||
break;
|
||||
case CHIP_FIJI:
|
||||
fiji_set_asic_special_caps(hwmgr);
|
||||
hwmgr->feature_mask &= ~(PP_SMC_VOLTAGE_CONTROL_MASK |
|
||||
PP_VBI_TIME_SUPPORT_MASK |
|
||||
hwmgr->feature_mask &= ~ (PP_VBI_TIME_SUPPORT_MASK |
|
||||
PP_ENABLE_GFX_CG_THRU_SMU);
|
||||
break;
|
||||
case CHIP_POLARIS11:
|
||||
@@ -685,20 +682,24 @@ void hwmgr_init_default_caps(struct pp_hwmgr *hwmgr)
|
||||
|
||||
int hwmgr_set_user_specify_caps(struct pp_hwmgr *hwmgr)
|
||||
{
|
||||
if (amdgpu_sclk_deep_sleep_en)
|
||||
if (amdgpu_pp_feature_mask & PP_SCLK_DEEP_SLEEP_MASK)
|
||||
phm_cap_set(hwmgr->platform_descriptor.platformCaps,
|
||||
PHM_PlatformCaps_SclkDeepSleep);
|
||||
else
|
||||
phm_cap_unset(hwmgr->platform_descriptor.platformCaps,
|
||||
PHM_PlatformCaps_SclkDeepSleep);
|
||||
|
||||
if (amdgpu_powercontainment)
|
||||
if (amdgpu_pp_feature_mask & PP_POWER_CONTAINMENT_MASK) {
|
||||
phm_cap_set(hwmgr->platform_descriptor.platformCaps,
|
||||
PHM_PlatformCaps_PowerContainment);
|
||||
else
|
||||
phm_cap_set(hwmgr->platform_descriptor.platformCaps,
|
||||
PHM_PlatformCaps_CAC);
|
||||
} else {
|
||||
phm_cap_unset(hwmgr->platform_descriptor.platformCaps,
|
||||
PHM_PlatformCaps_PowerContainment);
|
||||
|
||||
phm_cap_unset(hwmgr->platform_descriptor.platformCaps,
|
||||
PHM_PlatformCaps_CAC);
|
||||
}
|
||||
hwmgr->feature_mask = amdgpu_pp_feature_mask;
|
||||
|
||||
return 0;
|
||||
@@ -735,9 +736,6 @@ int polaris_set_asic_special_caps(struct pp_hwmgr *hwmgr)
|
||||
phm_cap_set(hwmgr->platform_descriptor.platformCaps,
|
||||
PHM_PlatformCaps_TCPRamping);
|
||||
|
||||
phm_cap_set(hwmgr->platform_descriptor.platformCaps,
|
||||
PHM_PlatformCaps_CAC);
|
||||
|
||||
phm_cap_set(hwmgr->platform_descriptor.platformCaps,
|
||||
PHM_PlatformCaps_RegulatorHot);
|
||||
|
||||
@@ -767,8 +765,6 @@ int fiji_set_asic_special_caps(struct pp_hwmgr *hwmgr)
|
||||
phm_cap_set(hwmgr->platform_descriptor.platformCaps,
|
||||
PHM_PlatformCaps_TablelessHardwareInterface);
|
||||
|
||||
phm_cap_set(hwmgr->platform_descriptor.platformCaps,
|
||||
PHM_PlatformCaps_CAC);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -791,9 +787,6 @@ int tonga_set_asic_special_caps(struct pp_hwmgr *hwmgr)
|
||||
phm_cap_set(hwmgr->platform_descriptor.platformCaps,
|
||||
PHM_PlatformCaps_TablelessHardwareInterface);
|
||||
|
||||
phm_cap_set(hwmgr->platform_descriptor.platformCaps,
|
||||
PHM_PlatformCaps_CAC);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -809,8 +802,6 @@ int topaz_set_asic_special_caps(struct pp_hwmgr *hwmgr)
|
||||
PHM_PlatformCaps_TCPRamping);
|
||||
phm_cap_set(hwmgr->platform_descriptor.platformCaps,
|
||||
PHM_PlatformCaps_TablelessHardwareInterface);
|
||||
phm_cap_set(hwmgr->platform_descriptor.platformCaps,
|
||||
PHM_PlatformCaps_CAC);
|
||||
phm_cap_set(hwmgr->platform_descriptor.platformCaps,
|
||||
PHM_PlatformCaps_EVV);
|
||||
return 0;
|
||||
|
@@ -149,7 +149,7 @@ int smu7_powergate_uvd(struct pp_hwmgr *hwmgr, bool bgate)
|
||||
if (bgate) {
|
||||
cgs_set_clockgating_state(hwmgr->device,
|
||||
AMD_IP_BLOCK_TYPE_UVD,
|
||||
AMD_CG_STATE_UNGATE);
|
||||
AMD_CG_STATE_GATE);
|
||||
cgs_set_powergating_state(hwmgr->device,
|
||||
AMD_IP_BLOCK_TYPE_UVD,
|
||||
AMD_PG_STATE_GATE);
|
||||
@@ -162,7 +162,7 @@ int smu7_powergate_uvd(struct pp_hwmgr *hwmgr, bool bgate)
|
||||
AMD_CG_STATE_UNGATE);
|
||||
cgs_set_clockgating_state(hwmgr->device,
|
||||
AMD_IP_BLOCK_TYPE_UVD,
|
||||
AMD_CG_STATE_GATE);
|
||||
AMD_CG_STATE_UNGATE);
|
||||
smu7_update_uvd_dpm(hwmgr, false);
|
||||
}
|
||||
|
||||
|
@@ -993,13 +993,6 @@ static int smu7_start_dpm(struct pp_hwmgr *hwmgr)
|
||||
PHM_WRITE_INDIRECT_FIELD(hwmgr->device, CGS_IND_REG__PCIE,
|
||||
SWRST_COMMAND_1, RESETLC, 0x0);
|
||||
|
||||
PP_ASSERT_WITH_CODE(
|
||||
(0 == smum_send_msg_to_smc(hwmgr->smumgr,
|
||||
PPSMC_MSG_Voltage_Cntl_Enable)),
|
||||
"Failed to enable voltage DPM during DPM Start Function!",
|
||||
return -EINVAL);
|
||||
|
||||
|
||||
if (smu7_enable_sclk_mclk_dpm(hwmgr)) {
|
||||
printk(KERN_ERR "Failed to enable Sclk DPM and Mclk DPM!");
|
||||
return -EINVAL;
|
||||
@@ -1428,7 +1421,7 @@ static void smu7_init_dpm_defaults(struct pp_hwmgr *hwmgr)
|
||||
phm_cap_unset(hwmgr->platform_descriptor.platformCaps,
|
||||
PHM_PlatformCaps_ControlVDDCI);
|
||||
|
||||
if ((hwmgr->pp_table_version != PP_TABLE_V0)
|
||||
if ((hwmgr->pp_table_version != PP_TABLE_V0) && (hwmgr->feature_mask & PP_CLOCK_STRETCH_MASK)
|
||||
&& (table_info->cac_dtp_table->usClockStretchAmount != 0))
|
||||
phm_cap_set(hwmgr->platform_descriptor.platformCaps,
|
||||
PHM_PlatformCaps_ClockStretcher);
|
||||
@@ -2008,8 +2001,9 @@ static int smu7_thermal_parameter_init(struct pp_hwmgr *hwmgr)
|
||||
|
||||
hwmgr->dyn_state.cac_dtp_table->usTargetOperatingTemp =
|
||||
table_info->cac_dtp_table->usTargetOperatingTemp;
|
||||
phm_cap_set(hwmgr->platform_descriptor.platformCaps,
|
||||
PHM_PlatformCaps_ODFuzzyFanControlSupport);
|
||||
if (hwmgr->feature_mask & PP_OD_FUZZY_FAN_CONTROL_MASK)
|
||||
phm_cap_set(hwmgr->platform_descriptor.platformCaps,
|
||||
PHM_PlatformCaps_ODFuzzyFanControlSupport);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@@ -603,9 +603,10 @@ int smu7_set_power_limit(struct pp_hwmgr *hwmgr, uint32_t n)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int smu7_set_overdriver_target_tdp(struct pp_hwmgr *pHwMgr, uint32_t target_tdp)
|
||||
static int smu7_set_overdriver_target_tdp(struct pp_hwmgr *hwmgr,
|
||||
uint32_t target_tdp)
|
||||
{
|
||||
return smum_send_msg_to_smc_with_parameter(pHwMgr->smumgr,
|
||||
return smum_send_msg_to_smc_with_parameter(hwmgr->smumgr,
|
||||
PPSMC_MSG_OverDriveSetTargetTdp, target_tdp);
|
||||
}
|
||||
|
||||
|
@@ -29,6 +29,8 @@
|
||||
#include "amd_shared.h"
|
||||
#include "cgs_common.h"
|
||||
|
||||
extern int amdgpu_dpm;
|
||||
|
||||
enum amd_pp_sensors {
|
||||
AMDGPU_PP_SENSOR_GFX_SCLK = 0,
|
||||
AMDGPU_PP_SENSOR_VDDNB,
|
||||
@@ -349,6 +351,7 @@ struct amd_powerplay_funcs {
|
||||
int (*get_fan_control_mode)(void *handle);
|
||||
int (*set_fan_speed_percent)(void *handle, uint32_t percent);
|
||||
int (*get_fan_speed_percent)(void *handle, uint32_t *speed);
|
||||
int (*get_fan_speed_rpm)(void *handle, uint32_t *rpm);
|
||||
int (*get_pp_num_states)(void *handle, struct pp_states_info *data);
|
||||
int (*get_pp_table)(void *handle, char **table);
|
||||
int (*set_pp_table)(void *handle, const char *buf, size_t size);
|
||||
|
@@ -38,8 +38,6 @@ struct pp_hwmgr;
|
||||
struct phm_fan_speed_info;
|
||||
struct pp_atomctrl_voltage_table;
|
||||
|
||||
extern int amdgpu_powercontainment;
|
||||
extern int amdgpu_sclk_deep_sleep_en;
|
||||
extern unsigned amdgpu_pp_feature_mask;
|
||||
|
||||
#define VOLTAGE_SCALE 4
|
||||
@@ -85,7 +83,9 @@ enum PP_FEATURE_MASK {
|
||||
PP_SMC_VOLTAGE_CONTROL_MASK = 0x40,
|
||||
PP_VBI_TIME_SUPPORT_MASK = 0x80,
|
||||
PP_ULV_MASK = 0x100,
|
||||
PP_ENABLE_GFX_CG_THRU_SMU = 0x200
|
||||
PP_ENABLE_GFX_CG_THRU_SMU = 0x200,
|
||||
PP_CLOCK_STRETCH_MASK = 0x400,
|
||||
PP_OD_FUZZY_FAN_CONTROL_MASK = 0x800
|
||||
};
|
||||
|
||||
enum PHM_BackEnd_Magic {
|
||||
|
@@ -396,7 +396,8 @@ static int fiji_start_smu(struct pp_smumgr *smumgr)
|
||||
struct fiji_smumgr *priv = (struct fiji_smumgr *)(smumgr->backend);
|
||||
|
||||
/* Only start SMC if SMC RAM is not running */
|
||||
if (!smu7_is_smc_ram_running(smumgr)) {
|
||||
if (!(smu7_is_smc_ram_running(smumgr)
|
||||
|| cgs_is_virtualization_enabled(smumgr->device))) {
|
||||
fiji_avfs_event_mgr(smumgr, false);
|
||||
|
||||
/* Check if SMU is running in protected mode */
|
||||
@@ -443,6 +444,9 @@ static bool fiji_is_hw_avfs_present(struct pp_smumgr *smumgr)
|
||||
uint32_t efuse = 0;
|
||||
uint32_t mask = (1 << ((AVFS_EN_MSB - AVFS_EN_LSB) + 1)) - 1;
|
||||
|
||||
if (cgs_is_virtualization_enabled(smumgr->device))
|
||||
return 0;
|
||||
|
||||
if (!atomctrl_read_efuse(smumgr->device, AVFS_EN_LSB, AVFS_EN_MSB,
|
||||
mask, &efuse)) {
|
||||
if (efuse)
|
||||
|
@@ -140,7 +140,8 @@ static int tonga_start_smu(struct pp_smumgr *smumgr)
|
||||
int result;
|
||||
|
||||
/* Only start SMC if SMC RAM is not running */
|
||||
if (!smu7_is_smc_ram_running(smumgr)) {
|
||||
if (!(smu7_is_smc_ram_running(smumgr) ||
|
||||
cgs_is_virtualization_enabled(smumgr->device))) {
|
||||
/*Check if SMU is running in protected mode*/
|
||||
if (0 == SMUM_READ_VFPF_INDIRECT_FIELD(smumgr->device, CGS_IND_REG__SMC,
|
||||
SMU_FIRMWARE, SMU_MODE)) {
|
||||
|
Reference in New Issue
Block a user