Patch1 is reviewed-by: Evan Quan <evan.q...@amd.com>
Patch2 & 3 are acked-by: Evan Quan <evan.q...@amd.com>

-----Original Message-----
From: Hawking Zhang <hawking.zh...@amd.com> 
Sent: Monday, February 24, 2020 6:06 PM
To: amd-gfx@lists.freedesktop.org; Clements, John <john.cleme...@amd.com>; 
Deucher, Alexander <alexander.deuc...@amd.com>; Feng, Kenneth 
<kenneth.f...@amd.com>; Quan, Evan <evan.q...@amd.com>
Cc: Zhang, Hawking <hawking.zh...@amd.com>
Subject: [PATCH 3/3] drm/amdgpu: toggle DF-Cstate to protect DF reg access

driver needs to take DF out Cstate before any DF register
access. otherwise, the DF register may not be accessible.

Signed-off-by: Hawking Zhang <hawking.zh...@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c | 25 +++++++++++++++++++-----
 1 file changed, 20 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c
index 8edd1db0d1ce..856dd22465d4 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c
@@ -535,13 +535,28 @@ uint64_t amdgpu_xgmi_get_relative_phy_addr(struct 
amdgpu_device *adev,
                                           uint64_t addr)
 {
        uint32_t df_inst_id;
+       uint64_t dram_base_addr = 0;
+       const struct amdgpu_df_funcs *df_funcs = adev->df.funcs;
+
+       if ((!df_funcs)                 ||
+           (!df_funcs->get_df_inst_id) ||
+           (!df_funcs->get_dram_base_addr)) {
+               dev_warn(adev->dev,
+                        "XGMI: relative phy_addr algorithm is not 
supported\n");
+               return addr;
+       }
 
-       if ((!adev->df.funcs)                 ||
-           (!adev->df.funcs->get_df_inst_id) ||
-           (!adev->df.funcs->get_dram_base_addr))
+       if (amdgpu_dpm_set_df_cstate(adev, DF_CSTATE_DISALLOW)) {
+               dev_warn(adev->dev,
+                        "failed to disable DF-Cstate, DF register may not be 
accessible\n");
                return addr;
+       }
+
+       df_inst_id = df_funcs->get_df_inst_id(adev);
+       dram_base_addr = df_funcs->get_dram_base_addr(adev, df_inst_id);
 
-       df_inst_id = adev->df.funcs->get_df_inst_id(adev);
+       if (amdgpu_dpm_set_df_cstate(adev, DF_CSTATE_ALLOW))
+               dev_warn(adev->dev, "failed to enable DF-Cstate\n");
 
-       return addr + adev->df.funcs->get_dram_base_addr(adev, df_inst_id);
+       return addr + dram_base_addr;
 }
-- 
2.17.1

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to