aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTao Zhou <tao.zhou1@amd.com>2019-07-22 23:57:15 -0400
committerAlex Deucher <alexander.deucher@amd.com>2019-07-31 15:49:46 -0400
commit5bbfb64a177f36d3d208e39c61ce6df3968df4d4 (patch)
treee55fbaaab5073efad736025ac5f43b249939f8c4
parent4fa1c6a679bb0d0bb92cf5bf9b7049ef98552848 (diff)
drm/amdgpu: use 64bit operation macros for umc
replace some 32bit macros with 64bit operations to simplify code Signed-off-by: Tao Zhou <tao.zhou1@amd.com> Reviewed-by: Dennis Li <dennis.li@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--drivers/gpu/drm/amd/amdgpu/umc_v6_1.c25
1 files changed, 8 insertions, 17 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/umc_v6_1.c b/drivers/gpu/drm/amd/amdgpu/umc_v6_1.c
index 1ca5ae642946..8fbd81d3ce70 100644
--- a/drivers/gpu/drm/amd/amdgpu/umc_v6_1.c
+++ b/drivers/gpu/drm/amd/amdgpu/umc_v6_1.c
@@ -94,18 +94,11 @@ static void umc_v6_1_query_correctable_error_count(struct amdgpu_device *adev,
94 94
95 /* check for SRAM correctable error 95 /* check for SRAM correctable error
96 MCUMC_STATUS is a 64 bit register */ 96 MCUMC_STATUS is a 64 bit register */
97 mc_umc_status = 97 mc_umc_status = RREG64(mc_umc_status_addr + umc_reg_offset);
98 RREG32(mc_umc_status_addr + umc_reg_offset);
99 mc_umc_status |=
100 (uint64_t)RREG32(mc_umc_status_addr + umc_reg_offset + 1) << 32;
101 if (REG_GET_FIELD(mc_umc_status, MCA_UMC_UMC0_MCUMC_STATUST0, ErrorCodeExt) == 6 && 98 if (REG_GET_FIELD(mc_umc_status, MCA_UMC_UMC0_MCUMC_STATUST0, ErrorCodeExt) == 6 &&
102 REG_GET_FIELD(mc_umc_status, MCA_UMC_UMC0_MCUMC_STATUST0, Val) == 1 && 99 REG_GET_FIELD(mc_umc_status, MCA_UMC_UMC0_MCUMC_STATUST0, Val) == 1 &&
103 REG_GET_FIELD(mc_umc_status, MCA_UMC_UMC0_MCUMC_STATUST0, CECC) == 1) 100 REG_GET_FIELD(mc_umc_status, MCA_UMC_UMC0_MCUMC_STATUST0, CECC) == 1)
104 *error_count += 1; 101 *error_count += 1;
105
106 /* clear the MCUMC_STATUS */
107 WREG32(mc_umc_status_addr + umc_reg_offset, 0);
108 WREG32(mc_umc_status_addr + umc_reg_offset + 1, 0);
109} 102}
110 103
111static void umc_v6_1_querry_uncorrectable_error_count(struct amdgpu_device *adev, 104static void umc_v6_1_querry_uncorrectable_error_count(struct amdgpu_device *adev,
@@ -119,10 +112,7 @@ static void umc_v6_1_querry_uncorrectable_error_count(struct amdgpu_device *adev
119 SOC15_REG_OFFSET(UMC, 0, mmMCA_UMC_UMC0_MCUMC_STATUST0); 112 SOC15_REG_OFFSET(UMC, 0, mmMCA_UMC_UMC0_MCUMC_STATUST0);
120 113
121 /* check the MCUMC_STATUS */ 114 /* check the MCUMC_STATUS */
122 mc_umc_status = RREG32(mc_umc_status_addr + umc_reg_offset); 115 mc_umc_status = RREG64(mc_umc_status_addr + umc_reg_offset);
123 mc_umc_status |=
124 (uint64_t)RREG32(mc_umc_status_addr + umc_reg_offset + 1) << 32;
125
126 if (REG_GET_FIELD(mc_umc_status, MCA_UMC_UMC0_MCUMC_STATUST0, Val) == 1 && 116 if (REG_GET_FIELD(mc_umc_status, MCA_UMC_UMC0_MCUMC_STATUST0, Val) == 1 &&
127 REG_GET_FIELD(mc_umc_status, MCA_UMC_UMC0_MCUMC_STATUST0, ErrorCodeExt) == 6 && 117 REG_GET_FIELD(mc_umc_status, MCA_UMC_UMC0_MCUMC_STATUST0, ErrorCodeExt) == 6 &&
128 (REG_GET_FIELD(mc_umc_status, MCA_UMC_UMC0_MCUMC_STATUST0, UECC) == 1 || 118 (REG_GET_FIELD(mc_umc_status, MCA_UMC_UMC0_MCUMC_STATUST0, UECC) == 1 ||
@@ -130,17 +120,16 @@ static void umc_v6_1_querry_uncorrectable_error_count(struct amdgpu_device *adev
130 REG_GET_FIELD(mc_umc_status, MCA_UMC_UMC0_MCUMC_STATUST0, UC) == 1 || 120 REG_GET_FIELD(mc_umc_status, MCA_UMC_UMC0_MCUMC_STATUST0, UC) == 1 ||
131 REG_GET_FIELD(mc_umc_status, MCA_UMC_UMC0_MCUMC_STATUST0, TCC) == 1)) 121 REG_GET_FIELD(mc_umc_status, MCA_UMC_UMC0_MCUMC_STATUST0, TCC) == 1))
132 *error_count += 1; 122 *error_count += 1;
133
134 /* clear the MCUMC_STATUS */
135 WREG32(mc_umc_status_addr + umc_reg_offset, 0);
136 WREG32(mc_umc_status_addr + umc_reg_offset + 1, 0);
137} 123}
138 124
139static void umc_v6_1_query_ras_error_count(struct amdgpu_device *adev, 125static void umc_v6_1_query_ras_error_count(struct amdgpu_device *adev,
140 void *ras_error_status) 126 void *ras_error_status)
141{ 127{
142 struct ras_err_data *err_data = (struct ras_err_data *)ras_error_status; 128 struct ras_err_data *err_data = (struct ras_err_data *)ras_error_status;
143 uint32_t umc_inst, channel_inst, umc_reg_offset; 129 uint32_t umc_inst, channel_inst, umc_reg_offset, mc_umc_status_addr;
130
131 mc_umc_status_addr =
132 SOC15_REG_OFFSET(UMC, 0, mmMCA_UMC_UMC0_MCUMC_STATUST0);
144 133
145 for (umc_inst = 0; umc_inst < UMC_V6_1_UMC_INSTANCE_NUM; umc_inst++) { 134 for (umc_inst = 0; umc_inst < UMC_V6_1_UMC_INSTANCE_NUM; umc_inst++) {
146 /* enable the index mode to query eror count per channel */ 135 /* enable the index mode to query eror count per channel */
@@ -152,6 +141,8 @@ static void umc_v6_1_query_ras_error_count(struct amdgpu_device *adev,
152 &(err_data->ce_count)); 141 &(err_data->ce_count));
153 umc_v6_1_querry_uncorrectable_error_count(adev, umc_reg_offset, 142 umc_v6_1_querry_uncorrectable_error_count(adev, umc_reg_offset,
154 &(err_data->ue_count)); 143 &(err_data->ue_count));
144 /* clear umc status */
145 WREG64(mc_umc_status_addr + umc_reg_offset, 0x0ULL);
155 } 146 }
156 } 147 }
157 umc_v6_1_disable_umc_index_mode(adev); 148 umc_v6_1_disable_umc_index_mode(adev);