From bf9f81158639eb8df72e3c8e89c86e6f4c499355 Mon Sep 17 00:00:00 2001
From: John Clements <john.clements@amd.com>
Date: Wed, 9 Sep 2020 17:19:53 +0800
Subject: [PATCH] drm/amdgpu: Update RAS init handling

Upon RAS init failure:
Output RAS init status in log
Do not attempt further RAS FW functions

Signed-off-by: John Clements <john.clements@amd.com>
Change-Id: Ie59c764f5eec387d04bd676ad4e053bb39f30667
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 9 ++++++++-
 drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c | 3 +++
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
index d6c38e24f130..c765d14efb58 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
@@ -929,6 +929,7 @@ static int psp_ras_load(struct psp_context *psp)
 {
 	int ret;
 	struct psp_gfx_cmd_resp *cmd;
+	struct ta_ras_shared_memory *ras_cmd;
 
 	/*
 	 * TODO: bypass the loading in sriov for now
@@ -952,9 +953,15 @@ static int psp_ras_load(struct psp_context *psp)
 	ret = psp_cmd_submit_buf(psp, NULL, cmd,
 			psp->fence_buf_mc_addr);
 
+	ras_cmd = (struct ta_ras_shared_memory*)psp->ras.ras_shared_buf;
+
 	if (!ret) {
-		psp->ras.ras_initialized = true;
 		psp->ras.session_id = cmd->resp.session_id;
+
+		if (!ras_cmd->ras_status)
+			psp->ras.ras_initialized = true;
+        else
+			dev_warn(psp->adev->dev, "RAS Init Status: 0x%X\n", ras_cmd->ras_status);
 	}
 
 	kfree(cmd);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
index e5ea14774c0c..c659b105b66b 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
@@ -604,6 +604,9 @@ int amdgpu_ras_feature_enable(struct amdgpu_device *adev,
 	union ta_ras_cmd_input *info;
 	int ret;
 
+	if (!adev->psp.ras.ras_initialized)
+		return -EINVAL;
+
 	if (!con)
 		return -EINVAL;
 
-- 
2.17.1

