Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amdgpu: updated UMC error address record with correct channel index

defined macros for repetitive for loops

Reviewed-by: Guchun Chen <guchun.chen@amd.com>
Signed-off-by: John Clements <john.clements@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

John Clements and committed by
Alex Deucher
c8aa6ae3 0ee51f1d

+30 -31
+30 -31
drivers/gpu/drm/amd/amdgpu/umc_v6_1.c
··· 44 44 /* offset in 256B block */ 45 45 #define OFFSET_IN_256B_BLOCK(addr) ((addr) & 0xffULL) 46 46 47 + #define LOOP_UMC_INST(umc_inst) for ((umc_inst) = 0; (umc_inst) < adev->umc.umc_inst_num; (umc_inst)++) 48 + #define LOOP_UMC_CH_INST(ch_inst) for ((ch_inst) = 0; (ch_inst) < adev->umc.channel_inst_num; (ch_inst)++) 49 + #define LOOP_UMC_INST_AND_CH(umc_inst, ch_inst) LOOP_UMC_INST((umc_inst)) LOOP_UMC_CH_INST((ch_inst)) 50 + 47 51 const uint32_t 48 52 umc_v6_1_channel_idx_tbl[UMC_V6_1_UMC_INSTANCE_NUM][UMC_V6_1_CHANNEL_INSTANCE_NUM] = { 49 53 {2, 18, 11, 27}, {4, 20, 13, 29}, ··· 165 161 uint32_t ch_inst = 0; 166 162 uint32_t umc_reg_offset = 0; 167 163 168 - for (umc_inst = 0; umc_inst < adev->umc.umc_inst_num; umc_inst++) { 169 - for (ch_inst = 0; ch_inst < adev->umc.channel_inst_num; ch_inst++) { 170 - umc_reg_offset = get_umc_6_reg_offset(adev, 171 - umc_inst, 172 - ch_inst); 164 + LOOP_UMC_INST_AND_CH(umc_inst, ch_inst) { 165 + umc_reg_offset = get_umc_6_reg_offset(adev, 166 + umc_inst, 167 + ch_inst); 173 168 174 - umc_v6_1_query_correctable_error_count(adev, 175 - umc_reg_offset, 176 - &(err_data->ce_count)); 177 - umc_v6_1_querry_uncorrectable_error_count(adev, 178 - umc_reg_offset, 179 - &(err_data->ue_count)); 180 - } 169 + umc_v6_1_query_correctable_error_count(adev, 170 + umc_reg_offset, 171 + &(err_data->ce_count)); 172 + umc_v6_1_querry_uncorrectable_error_count(adev, 173 + umc_reg_offset, 174 + &(err_data->ue_count)); 181 175 } 182 176 } 183 177 184 178 static void umc_v6_1_query_error_address(struct amdgpu_device *adev, 185 179 struct ras_err_data *err_data, 186 180 uint32_t umc_reg_offset, 187 - uint32_t channel_index, 181 + uint32_t ch_inst, 188 182 uint32_t umc_inst) 189 183 { 190 184 uint32_t lsb, mc_umc_status_addr; 191 185 uint64_t mc_umc_status, err_addr, retired_page; 192 186 struct eeprom_table_record *err_rec; 187 + uint32_t channel_index = adev->umc.channel_idx_tbl[umc_inst * adev->umc.channel_inst_num + ch_inst]; 193 188 194 189 if (adev->asic_type == CHIP_ARCTURUS) { 195 190 /* UMC 6_1_2 registers */ ··· 255 252 uint32_t ch_inst = 0; 256 253 uint32_t umc_reg_offset = 0; 257 254 258 - for (umc_inst = 0; umc_inst < adev->umc.umc_inst_num; umc_inst++) { 259 - for (ch_inst = 0; ch_inst < adev->umc.channel_inst_num; ch_inst++) { 260 - umc_reg_offset = get_umc_6_reg_offset(adev, 261 - umc_inst, 262 - ch_inst); 255 + LOOP_UMC_INST_AND_CH(umc_inst, ch_inst) { 256 + umc_reg_offset = get_umc_6_reg_offset(adev, 257 + umc_inst, 258 + ch_inst); 263 259 264 - umc_v6_1_query_error_address(adev, 265 - err_data, 266 - umc_reg_offset, 267 - ch_inst, 268 - umc_inst); 269 - } 260 + umc_v6_1_query_error_address(adev, 261 + err_data, 262 + umc_reg_offset, 263 + ch_inst, 264 + umc_inst); 270 265 } 271 266 272 267 } ··· 315 314 316 315 umc_v6_1_disable_umc_index_mode(adev); 317 316 318 - for (umc_inst = 0; umc_inst < adev->umc.umc_inst_num; umc_inst++) { 319 - for (ch_inst = 0; ch_inst < adev->umc.channel_inst_num; ch_inst++) { 320 - umc_reg_offset = get_umc_6_reg_offset(adev, 321 - umc_inst, 322 - ch_inst); 317 + LOOP_UMC_INST_AND_CH(umc_inst, ch_inst) { 318 + umc_reg_offset = get_umc_6_reg_offset(adev, 319 + umc_inst, 320 + ch_inst); 323 321 324 - umc_v6_1_err_cnt_init_per_channel(adev, umc_reg_offset); 325 - } 322 + umc_v6_1_err_cnt_init_per_channel(adev, umc_reg_offset); 326 323 } 327 324 } 328 325