[AMD Official Use Only - Internal Distribution Only]

+               if (!r) {
+                       DRM_INFO("SRAM ECC is not present.\n");
+               } else {
+                       DRM_INFO("SRAM ECC is active.\n");
                }
{} is not  needed. With that fixed, the patch is

Reviewed-by: Hawking Zhang <hawking.zh...@amd.com>

Regards,
Hawking

-----Original Message-----
From: Chen, Guchun <guchun.c...@amd.com> 
Sent: Thursday, March 12, 2020 12:03
To: amd-gfx@lists.freedesktop.org; Zhang, Hawking <hawking.zh...@amd.com>; Li, 
Dennis <dennis...@amd.com>; Zhou1, Tao <tao.zh...@amd.com>; Clements, John 
<john.cleme...@amd.com>
Cc: Chen, Guchun <guchun.c...@amd.com>
Subject: [PATCH] drm/amdgpu: update ras capability's query based on mem ecc 
configuration

RAS support capability needs to be updated on top of different memeory ECC 
enablement, and remove redundant memory ecc check in gmc module for vega20 and 
arcturus.

v2: check HBM ECC enablement and set ras mask accordingly.
v3: avoid to invoke atomfirmware interface to query twice.

Suggested-by: Hawking Zhang <hawking.zh...@amd.com>
Signed-off-by: Guchun Chen <guchun.c...@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c | 24 ++++++++++++-----
 drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c   | 36 ++++++++++---------------
 2 files changed, 32 insertions(+), 28 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
index 69b02b9d4131..38782add479a 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
@@ -1738,18 +1738,30 @@ static void amdgpu_ras_check_supported(struct 
amdgpu_device *adev,
        *hw_supported = 0;
        *supported = 0;
 
-       if (amdgpu_sriov_vf(adev) ||
+       if (amdgpu_sriov_vf(adev) || !adev->is_atom_fw ||
            (adev->asic_type != CHIP_VEGA20 &&
             adev->asic_type != CHIP_ARCTURUS))
                return;
 
-       if (adev->is_atom_fw &&
-                       (amdgpu_atomfirmware_mem_ecc_supported(adev) ||
-                        amdgpu_atomfirmware_sram_ecc_supported(adev)))
-               *hw_supported = AMDGPU_RAS_BLOCK_MASK;
+       if (amdgpu_atomfirmware_mem_ecc_supported(adev)) {
+               DRM_INFO("HBM ECC is active.\n");
+               *hw_supported |= (1 << AMDGPU_RAS_BLOCK__UMC |
+                               1 << AMDGPU_RAS_BLOCK__DF);
+       } else
+               DRM_INFO("HBM ECC is not presented.\n");
+
+       if (amdgpu_atomfirmware_sram_ecc_supported(adev)) {
+               DRM_INFO("SRAM ECC is active.\n");
+               *hw_supported |= ~(1 << AMDGPU_RAS_BLOCK__UMC |
+                               1 << AMDGPU_RAS_BLOCK__DF);
+       } else
+               DRM_INFO("SRAM ECC is not presented.\n");
+
+       /* hw_supported needs to be aligned with RAS block mask. */
+       *hw_supported &= AMDGPU_RAS_BLOCK_MASK;
 
        *supported = amdgpu_ras_enable == 0 ?
-                               0 : *hw_supported & amdgpu_ras_mask;
+                       0 : *hw_supported & amdgpu_ras_mask;
 }
 
 int amdgpu_ras_init(struct amdgpu_device *adev) diff --git 
a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
index 90216abf14a4..3cc886e96420 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
@@ -886,29 +886,21 @@ static int gmc_v9_0_late_init(void *handle)
        if (r)
                return r;
        /* Check if ecc is available */
-       if (!amdgpu_sriov_vf(adev)) {
-               switch (adev->asic_type) {
-               case CHIP_VEGA10:
-               case CHIP_VEGA20:
-               case CHIP_ARCTURUS:
-                       r = amdgpu_atomfirmware_mem_ecc_supported(adev);
-                       if (!r) {
-                               DRM_INFO("ECC is not present.\n");
-                               if (adev->df.funcs->enable_ecc_force_par_wr_rmw)
-                                       
adev->df.funcs->enable_ecc_force_par_wr_rmw(adev, false);
-                       } else {
-                               DRM_INFO("ECC is active.\n");
-                       }
+       if (!amdgpu_sriov_vf(adev) && (adev->asic_type == CHIP_VEGA10)) {
+               r = amdgpu_atomfirmware_mem_ecc_supported(adev);
+               if (!r) {
+                       DRM_INFO("ECC is not present.\n");
+                       if (adev->df.funcs->enable_ecc_force_par_wr_rmw)
+                               
adev->df.funcs->enable_ecc_force_par_wr_rmw(adev, false);
+               } else {
+                       DRM_INFO("ECC is active.\n");
+               }
 
-                       r = amdgpu_atomfirmware_sram_ecc_supported(adev);
-                       if (!r) {
-                               DRM_INFO("SRAM ECC is not present.\n");
-                       } else {
-                               DRM_INFO("SRAM ECC is active.\n");
-                       }
-                       break;
-               default:
-                       break;
+               r = amdgpu_atomfirmware_sram_ecc_supported(adev);
+               if (!r) {
+                       DRM_INFO("SRAM ECC is not present.\n");
+               } else {
+                       DRM_INFO("SRAM ECC is active.\n");
                }
        }
 
--
2.17.1
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to