drm/amdgpu: resolve failed error inject msg
invoking an error injection successfully will cause an at_event intterrupt that will occur before the invoke sequence can complete causing an invalid error Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com> Signed-off-by: John Clements <john.clements@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:

committed by
Alex Deucher

parent
5f87611582
commit
c2c6f816a8
@@ -200,6 +200,7 @@ psp_cmd_submit_buf(struct psp_context *psp,
|
|||||||
int ret;
|
int ret;
|
||||||
int index;
|
int index;
|
||||||
int timeout = 2000;
|
int timeout = 2000;
|
||||||
|
bool ras_intr = false;
|
||||||
|
|
||||||
mutex_lock(&psp->mutex);
|
mutex_lock(&psp->mutex);
|
||||||
|
|
||||||
@@ -224,7 +225,8 @@ psp_cmd_submit_buf(struct psp_context *psp,
|
|||||||
* because gpu reset thread triggered and lock resource should
|
* because gpu reset thread triggered and lock resource should
|
||||||
* be released for psp resume sequence.
|
* be released for psp resume sequence.
|
||||||
*/
|
*/
|
||||||
if (amdgpu_ras_intr_triggered())
|
ras_intr = amdgpu_ras_intr_triggered();
|
||||||
|
if (ras_intr)
|
||||||
break;
|
break;
|
||||||
msleep(1);
|
msleep(1);
|
||||||
amdgpu_asic_invalidate_hdp(psp->adev, NULL);
|
amdgpu_asic_invalidate_hdp(psp->adev, NULL);
|
||||||
@@ -237,7 +239,7 @@ psp_cmd_submit_buf(struct psp_context *psp,
|
|||||||
* during psp initialization to avoid breaking hw_init and it doesn't
|
* during psp initialization to avoid breaking hw_init and it doesn't
|
||||||
* return -EINVAL.
|
* return -EINVAL.
|
||||||
*/
|
*/
|
||||||
if (psp->cmd_buf_mem->resp.status || !timeout) {
|
if ((psp->cmd_buf_mem->resp.status || !timeout) && !ras_intr) {
|
||||||
if (ucode)
|
if (ucode)
|
||||||
DRM_WARN("failed to load ucode id (%d) ",
|
DRM_WARN("failed to load ucode id (%d) ",
|
||||||
ucode->ucode_id);
|
ucode->ucode_id);
|
||||||
|
@@ -26,6 +26,7 @@
|
|||||||
|
|
||||||
#include "amdgpu.h"
|
#include "amdgpu.h"
|
||||||
#include "amdgpu_psp.h"
|
#include "amdgpu_psp.h"
|
||||||
|
#include "amdgpu_ras.h"
|
||||||
#include "amdgpu_ucode.h"
|
#include "amdgpu_ucode.h"
|
||||||
#include "soc15_common.h"
|
#include "soc15_common.h"
|
||||||
#include "psp_v11_0.h"
|
#include "psp_v11_0.h"
|
||||||
@@ -868,6 +869,11 @@ static int psp_v11_0_ras_trigger_error(struct psp_context *psp,
|
|||||||
if (ret)
|
if (ret)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
/* If err_event_athub occurs error inject was successful, however
|
||||||
|
return status from TA is no long reliable */
|
||||||
|
if (amdgpu_ras_intr_triggered())
|
||||||
|
return 0;
|
||||||
|
|
||||||
return ras_cmd->ras_status;
|
return ras_cmd->ras_status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user