Commit 311531f0 authored by Wenhui Sheng's avatar Wenhui Sheng Committed by Alex Deucher

drm/amdgpu: enable mode1 reset

For sienna cichlid, add mode1 reset path for sGPU.

v2: hiding MP0/MP1 mode1 reset under AMD_RESET_METHOD_MODE1
v3: split emergency restart logic to a new patch
Signed-off-by: default avatarLikun Gao <Likun.Gao@amd.com>
Signed-off-by: default avatarWenhui Sheng <Wenhui.Sheng@amd.com>
Reviewed-by: default avatarHawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent bb5c7235
...@@ -265,17 +265,21 @@ static int nv_asic_mode1_reset(struct amdgpu_device *adev) ...@@ -265,17 +265,21 @@ static int nv_asic_mode1_reset(struct amdgpu_device *adev)
amdgpu_atombios_scratch_regs_engine_hung(adev, true); amdgpu_atombios_scratch_regs_engine_hung(adev, true);
dev_info(adev->dev, "GPU mode1 reset\n");
/* disable BM */ /* disable BM */
pci_clear_master(adev->pdev); pci_clear_master(adev->pdev);
pci_save_state(adev->pdev); pci_save_state(adev->pdev);
if (amdgpu_dpm_is_mode1_reset_supported(adev)) {
dev_info(adev->dev, "GPU smu mode1 reset\n");
ret = amdgpu_dpm_mode1_reset(adev);
} else {
dev_info(adev->dev, "GPU psp mode1 reset\n");
ret = psp_gpu_reset(adev); ret = psp_gpu_reset(adev);
}
if (ret) if (ret)
dev_err(adev->dev, "GPU mode1 reset failed\n"); dev_err(adev->dev, "GPU mode1 reset failed\n");
pci_restore_state(adev->pdev); pci_restore_state(adev->pdev);
/* wait for asic to come out of reset */ /* wait for asic to come out of reset */
...@@ -307,7 +311,7 @@ nv_asic_reset_method(struct amdgpu_device *adev) ...@@ -307,7 +311,7 @@ nv_asic_reset_method(struct amdgpu_device *adev)
{ {
struct smu_context *smu = &adev->smu; struct smu_context *smu = &adev->smu;
if (!amdgpu_sriov_vf(adev) && smu_baco_is_support(smu)) if (smu_baco_is_support(smu))
return AMD_RESET_METHOD_BACO; return AMD_RESET_METHOD_BACO;
else else
return AMD_RESET_METHOD_MODE1; return AMD_RESET_METHOD_MODE1;
...@@ -319,15 +323,16 @@ static int nv_asic_reset(struct amdgpu_device *adev) ...@@ -319,15 +323,16 @@ static int nv_asic_reset(struct amdgpu_device *adev)
struct smu_context *smu = &adev->smu; struct smu_context *smu = &adev->smu;
if (nv_asic_reset_method(adev) == AMD_RESET_METHOD_BACO) { if (nv_asic_reset_method(adev) == AMD_RESET_METHOD_BACO) {
dev_info(adev->dev, "GPU BACO reset\n");
ret = smu_baco_enter(smu); ret = smu_baco_enter(smu);
if (ret) if (ret)
return ret; return ret;
ret = smu_baco_exit(smu); ret = smu_baco_exit(smu);
if (ret) if (ret)
return ret; return ret;
} else { } else
ret = nv_asic_mode1_reset(adev); ret = nv_asic_mode1_reset(adev);
}
return ret; return ret;
} }
......
...@@ -2057,7 +2057,7 @@ static bool navi10_is_baco_supported(struct smu_context *smu) ...@@ -2057,7 +2057,7 @@ static bool navi10_is_baco_supported(struct smu_context *smu)
struct amdgpu_device *adev = smu->adev; struct amdgpu_device *adev = smu->adev;
uint32_t val; uint32_t val;
if (!smu_v11_0_baco_is_support(smu)) if (amdgpu_sriov_vf(adev) || (!smu_v11_0_baco_is_support(smu)))
return false; return false;
val = RREG32_SOC15(NBIO, 0, mmRCC_BIF_STRAP0); val = RREG32_SOC15(NBIO, 0, mmRCC_BIF_STRAP0);
......
...@@ -1773,7 +1773,7 @@ static bool sienna_cichlid_is_baco_supported(struct smu_context *smu) ...@@ -1773,7 +1773,7 @@ static bool sienna_cichlid_is_baco_supported(struct smu_context *smu)
struct amdgpu_device *adev = smu->adev; struct amdgpu_device *adev = smu->adev;
uint32_t val; uint32_t val;
if (!smu_v11_0_baco_is_support(smu)) if (amdgpu_sriov_vf(adev) || (!smu_v11_0_baco_is_support(smu)))
return false; return false;
val = RREG32_SOC15(NBIO, 0, mmRCC_BIF_STRAP0); val = RREG32_SOC15(NBIO, 0, mmRCC_BIF_STRAP0);
......
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