mirror of
https://github.com/torvalds/linux.git
synced 2026-05-24 15:12:13 +02:00
drm/amd/pm: send unload command to smu during modprobe -r amdgpu
Send unload command to smu during modprobe -r amdgpu for smu 13/14. 1. This can fix the high voltage/temperatue issue after driver is unloaded. 2. Reloading driver could fail but with the debug port based mode1 reset during driver is reloaded, it is good and safe. Signed-off-by: Kenneth Feng <kenneth.feng@amd.com> Reviewed-by: Yang Wang <kevinyang.wang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
29b1b0b06d
commit
d76c66c6ad
|
|
@ -4652,9 +4652,6 @@ int amdgpu_device_init(struct amdgpu_device *adev,
|
|||
dev_info(adev->dev, "Pending hive reset.\n");
|
||||
amdgpu_set_init_level(adev,
|
||||
AMDGPU_INIT_LEVEL_MINIMAL_XGMI);
|
||||
} else if (amdgpu_ip_version(adev, MP1_HWIP, 0) == IP_VERSION(13, 0, 10) &&
|
||||
!amdgpu_device_has_display_hardware(adev)) {
|
||||
r = psp_gpu_reset(adev);
|
||||
} else {
|
||||
tmp = amdgpu_reset_method;
|
||||
/* It should do a default reset when loading or reloading the driver,
|
||||
|
|
|
|||
|
|
@ -810,7 +810,7 @@ static int smu_early_init(struct amdgpu_ip_block *ip_block)
|
|||
smu->adev = adev;
|
||||
smu->pm_enabled = !!amdgpu_dpm;
|
||||
smu->is_apu = false;
|
||||
smu->smu_baco.state = SMU_BACO_STATE_NONE;
|
||||
smu->smu_baco.state = SMU_BACO_STATE_EXIT;
|
||||
smu->smu_baco.platform_support = false;
|
||||
smu->smu_baco.maco_support = false;
|
||||
smu->user_dpm_profile.fan_mode = -1;
|
||||
|
|
@ -2120,9 +2120,8 @@ static int smu_reset_mp1_state(struct smu_context *smu)
|
|||
int ret = 0;
|
||||
|
||||
if ((!adev->in_runpm) && (!adev->in_suspend) &&
|
||||
(!amdgpu_in_reset(adev)) && amdgpu_ip_version(adev, MP1_HWIP, 0) ==
|
||||
IP_VERSION(13, 0, 10) &&
|
||||
!amdgpu_device_has_display_hardware(adev))
|
||||
(!amdgpu_in_reset(adev)) && !smu->is_apu &&
|
||||
amdgpu_ip_version(adev, MP1_HWIP, 0) >= IP_VERSION(13, 0, 0))
|
||||
ret = smu_set_mp1_state(smu, PP_MP1_STATE_UNLOAD);
|
||||
|
||||
return ret;
|
||||
|
|
|
|||
|
|
@ -536,7 +536,6 @@ enum smu_reset_mode {
|
|||
enum smu_baco_state {
|
||||
SMU_BACO_STATE_ENTER = 0,
|
||||
SMU_BACO_STATE_EXIT,
|
||||
SMU_BACO_STATE_NONE,
|
||||
};
|
||||
|
||||
struct smu_baco_context {
|
||||
|
|
|
|||
|
|
@ -2768,13 +2768,7 @@ static int smu_v13_0_0_set_mp1_state(struct smu_context *smu,
|
|||
|
||||
switch (mp1_state) {
|
||||
case PP_MP1_STATE_UNLOAD:
|
||||
ret = smu_cmn_send_smc_msg_with_param(smu,
|
||||
SMU_MSG_PrepareMp1ForUnload,
|
||||
0x55, NULL);
|
||||
|
||||
if (!ret && smu->smu_baco.state == SMU_BACO_STATE_EXIT)
|
||||
ret = smu_v13_0_disable_pmfw_state(smu);
|
||||
|
||||
ret = smu_cmn_set_mp1_state(smu, mp1_state);
|
||||
break;
|
||||
default:
|
||||
/* Ignore others */
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user