Commit 6867e1b5 authored by Monk Liu's avatar Monk Liu Committed by Alex Deucher

drm/amdgpu:fix vf_error_put

1,it should not work on non-SR-IOV case
2,the NO_VBIOS error is incorrect, should
handle it under detect_sriov_bios.
3,wrap the whole detect_sriov_bios with sriov check
Signed-off-by: default avatarMonk Liu <Monk.Liu@amd.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent ef4c166d
...@@ -2032,6 +2032,7 @@ static int amdgpu_resume(struct amdgpu_device *adev) ...@@ -2032,6 +2032,7 @@ static int amdgpu_resume(struct amdgpu_device *adev)
static void amdgpu_device_detect_sriov_bios(struct amdgpu_device *adev) static void amdgpu_device_detect_sriov_bios(struct amdgpu_device *adev)
{ {
if (amdgpu_sriov_vf(adev)) {
if (adev->is_atom_fw) { if (adev->is_atom_fw) {
if (amdgpu_atomfirmware_gpu_supports_virtualization(adev)) if (amdgpu_atomfirmware_gpu_supports_virtualization(adev))
adev->virt.caps |= AMDGPU_SRIOV_CAPS_SRIOV_VBIOS; adev->virt.caps |= AMDGPU_SRIOV_CAPS_SRIOV_VBIOS;
...@@ -2039,6 +2040,10 @@ static void amdgpu_device_detect_sriov_bios(struct amdgpu_device *adev) ...@@ -2039,6 +2040,10 @@ static void amdgpu_device_detect_sriov_bios(struct amdgpu_device *adev)
if (amdgpu_atombios_has_gpu_virtualization_table(adev)) if (amdgpu_atombios_has_gpu_virtualization_table(adev))
adev->virt.caps |= AMDGPU_SRIOV_CAPS_SRIOV_VBIOS; adev->virt.caps |= AMDGPU_SRIOV_CAPS_SRIOV_VBIOS;
} }
if (!(adev->virt.caps & AMDGPU_SRIOV_CAPS_SRIOV_VBIOS))
amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_NO_VBIOS, 0, 0);
}
} }
/** /**
...@@ -2207,7 +2212,6 @@ int amdgpu_device_init(struct amdgpu_device *adev, ...@@ -2207,7 +2212,6 @@ int amdgpu_device_init(struct amdgpu_device *adev,
if (amdgpu_need_post(adev)) { if (amdgpu_need_post(adev)) {
if (!adev->bios) { if (!adev->bios) {
dev_err(adev->dev, "no vBIOS found\n"); dev_err(adev->dev, "no vBIOS found\n");
amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_NO_VBIOS, 0, 0);
r = -EINVAL; r = -EINVAL;
goto failed; goto failed;
} }
...@@ -2215,7 +2219,6 @@ int amdgpu_device_init(struct amdgpu_device *adev, ...@@ -2215,7 +2219,6 @@ int amdgpu_device_init(struct amdgpu_device *adev,
r = amdgpu_atom_asic_init(adev->mode_info.atom_context); r = amdgpu_atom_asic_init(adev->mode_info.atom_context);
if (r) { if (r) {
dev_err(adev->dev, "gpu post error!\n"); dev_err(adev->dev, "gpu post error!\n");
amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_GPU_POST_ERROR, 0, 0);
goto failed; goto failed;
} }
} else { } else {
...@@ -3019,7 +3022,6 @@ int amdgpu_gpu_reset(struct amdgpu_device *adev) ...@@ -3019,7 +3022,6 @@ int amdgpu_gpu_reset(struct amdgpu_device *adev)
} }
} else { } else {
dev_err(adev->dev, "asic resume failed (%d).\n", r); dev_err(adev->dev, "asic resume failed (%d).\n", r);
amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_ASIC_RESUME_FAIL, 0, r);
for (i = 0; i < AMDGPU_MAX_RINGS; ++i) { for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
if (adev->rings[i] && adev->rings[i]->sched.thread) { if (adev->rings[i] && adev->rings[i]->sched.thread) {
kthread_unpark(adev->rings[i]->sched.thread); kthread_unpark(adev->rings[i]->sched.thread);
...@@ -3033,7 +3035,6 @@ int amdgpu_gpu_reset(struct amdgpu_device *adev) ...@@ -3033,7 +3035,6 @@ int amdgpu_gpu_reset(struct amdgpu_device *adev)
if (r) { if (r) {
/* bad news, how to tell it to userspace ? */ /* bad news, how to tell it to userspace ? */
dev_info(adev->dev, "GPU reset failed\n"); dev_info(adev->dev, "GPU reset failed\n");
amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_GPU_RESET_FAIL, 0, r);
} }
else { else {
dev_info(adev->dev, "GPU reset successed!\n"); dev_info(adev->dev, "GPU reset successed!\n");
......
...@@ -31,7 +31,12 @@ void amdgpu_vf_error_put(struct amdgpu_device *adev, ...@@ -31,7 +31,12 @@ void amdgpu_vf_error_put(struct amdgpu_device *adev,
uint64_t error_data) uint64_t error_data)
{ {
int index; int index;
uint16_t error_code = AMDGIM_ERROR_CODE(AMDGIM_ERROR_CATEGORY_VF, sub_error_code); uint16_t error_code;
if (!amdgpu_sriov_vf(adev))
return;
error_code = AMDGIM_ERROR_CODE(AMDGIM_ERROR_CATEGORY_VF, sub_error_code);
mutex_lock(&adev->virt.vf_errors.lock); mutex_lock(&adev->virt.vf_errors.lock);
index = adev->virt.vf_errors.write_count % AMDGPU_VF_ERROR_ENTRY_SIZE; index = adev->virt.vf_errors.write_count % AMDGPU_VF_ERROR_ENTRY_SIZE;
......
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