diff options
author | Tao Zhou <tao.zhou1@amd.com> | 2019-07-22 23:57:15 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2019-07-31 15:49:46 -0400 |
commit | 5bbfb64a177f36d3d208e39c61ce6df3968df4d4 (patch) | |
tree | e55fbaaab5073efad736025ac5f43b249939f8c4 | |
parent | 4fa1c6a679bb0d0bb92cf5bf9b7049ef98552848 (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.c | 25 |
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 | ||
111 | static void umc_v6_1_querry_uncorrectable_error_count(struct amdgpu_device *adev, | 104 | static 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 | ||
139 | static void umc_v6_1_query_ras_error_count(struct amdgpu_device *adev, | 125 | static 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); |