drm/amdgpu: Rework xgmi_wafl_pcs ras sw_init
authorHawking Zhang <Hawking.Zhang@amd.com>
Sat, 4 Mar 2023 11:54:14 +0000 (19:54 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 15 Mar 2023 22:45:27 +0000 (18:45 -0400)
To align with other IP blocks.

Signed-off-by: Hawking Zhang <Hawking.Zhang@amd.com>
Reviewed-by: Stanley Yang <Stanley.Yang@amd.com>
Reviewed-by: Tao Zhou <tao.zhou1@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c
drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c
drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.h
drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c

index cc8e161..655fc8b 100644 (file)
@@ -479,11 +479,10 @@ int amdgpu_gmc_ras_sw_init(struct amdgpu_device *adev)
        if (r)
                return r;
 
-       if (!adev->gmc.xgmi.connected_to_cpu) {
-               adev->gmc.xgmi.ras = &xgmi_ras;
-               amdgpu_ras_register_ras_block(adev, &adev->gmc.xgmi.ras->ras_block);
-               adev->gmc.xgmi.ras_if = &adev->gmc.xgmi.ras->ras_block.ras_comm;
-       }
+       /* xgmi ras block */
+       r = amdgpu_xgmi_ras_sw_init(adev);
+       if (r)
+               return r;
 
        return 0;
 }
index fef1575..3fe2434 100644 (file)
@@ -1048,12 +1048,30 @@ struct amdgpu_ras_block_hw_ops  xgmi_ras_hw_ops = {
 
 struct amdgpu_xgmi_ras xgmi_ras = {
        .ras_block = {
-               .ras_comm = {
-                       .name = "xgmi_wafl",
-                       .block = AMDGPU_RAS_BLOCK__XGMI_WAFL,
-                       .type = AMDGPU_RAS_ERROR__MULTI_UNCORRECTABLE,
-               },
                .hw_ops = &xgmi_ras_hw_ops,
                .ras_late_init = amdgpu_xgmi_ras_late_init,
        },
 };
+
+int amdgpu_xgmi_ras_sw_init(struct amdgpu_device *adev)
+{
+       int err;
+       struct amdgpu_xgmi_ras *ras;
+
+       if (!adev->gmc.xgmi.ras)
+               return 0;
+
+       ras = adev->gmc.xgmi.ras;
+       err = amdgpu_ras_register_ras_block(adev, &ras->ras_block);
+       if (err) {
+               dev_err(adev->dev, "Failed to register xgmi_wafl_pcs ras block!\n");
+               return err;
+       }
+
+       strcpy(ras->ras_block.ras_comm.name, "xgmi_wafl_pcs");
+       ras->ras_block.ras_comm.block = AMDGPU_RAS_BLOCK__XGMI_WAFL;
+       ras->ras_block.ras_comm.type = AMDGPU_RAS_ERROR__MULTI_UNCORRECTABLE;
+       adev->gmc.xgmi.ras_if = &ras->ras_block.ras_comm;
+
+       return 0;
+}
index 30dcc16..86fbf56 100644 (file)
@@ -73,5 +73,6 @@ static inline bool amdgpu_xgmi_same_hive(struct amdgpu_device *adev,
                adev->gmc.xgmi.hive_id &&
                adev->gmc.xgmi.hive_id == bo_adev->gmc.xgmi.hive_id);
 }
+int amdgpu_xgmi_ras_sw_init(struct amdgpu_device *adev);
 
 #endif
index 67c2a51..2a8dc9b 100644 (file)
@@ -1381,6 +1381,12 @@ static void gmc_v9_0_set_mca_ras_funcs(struct amdgpu_device *adev)
        }
 }
 
+static void gmc_v9_0_set_xgmi_ras_funcs(struct amdgpu_device *adev)
+{
+       if (!adev->gmc.xgmi.connected_to_cpu)
+               adev->gmc.xgmi.ras = &xgmi_ras;
+}
+
 static int gmc_v9_0_early_init(void *handle)
 {
        struct amdgpu_device *adev = (struct amdgpu_device *)handle;
@@ -1404,6 +1410,7 @@ static int gmc_v9_0_early_init(void *handle)
        gmc_v9_0_set_gfxhub_funcs(adev);
        gmc_v9_0_set_hdp_ras_funcs(adev);
        gmc_v9_0_set_mca_ras_funcs(adev);
+       gmc_v9_0_set_xgmi_ras_funcs(adev);
 
        adev->gmc.shared_aperture_start = 0x2000000000000000ULL;
        adev->gmc.shared_aperture_end =