diff options
author | Tao Zhou <tao.zhou1@amd.com> | 2019-07-29 02:50:35 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2019-08-02 11:30:38 -0400 |
commit | fee858ba5f96e6cbcbe8167444aeb6532519bb8c (patch) | |
tree | f0f6170274509402e04db6ada7ccfbfbbb69640d | |
parent | 3aacf4ea1102f24c8dc63eb6f3d734cbc8bad86e (diff) |
drm/amdgpu: add macro of umc for each channel
common function for all umc versions, loop for each umc channel is
a frequent used operation in umc block, define it as a macro to
simplify code
Signed-off-by: Tao Zhou <tao.zhou1@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_umc.h | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_umc.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_umc.h index 2604f5076867..9efdd66279e5 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_umc.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_umc.h | |||
@@ -21,6 +21,29 @@ | |||
21 | #ifndef __AMDGPU_UMC_H__ | 21 | #ifndef __AMDGPU_UMC_H__ |
22 | #define __AMDGPU_UMC_H__ | 22 | #define __AMDGPU_UMC_H__ |
23 | 23 | ||
24 | /* | ||
25 | * void (*func)(struct amdgpu_device *adev, struct ras_err_data *err_data, | ||
26 | * uint32_t umc_reg_offset, uint32_t channel_index) | ||
27 | */ | ||
28 | #define amdgpu_umc_for_each_channel(func) \ | ||
29 | struct ras_err_data *err_data = (struct ras_err_data *)ras_error_status; \ | ||
30 | uint32_t umc_inst, channel_inst, umc_reg_offset, channel_index; \ | ||
31 | for (umc_inst = 0; umc_inst < adev->umc.umc_inst_num; umc_inst++) { \ | ||
32 | /* enable the index mode to query eror count per channel */ \ | ||
33 | adev->umc.funcs->enable_umc_index_mode(adev, umc_inst); \ | ||
34 | for (channel_inst = 0; \ | ||
35 | channel_inst < adev->umc.channel_inst_num; \ | ||
36 | channel_inst++) { \ | ||
37 | /* calc the register offset according to channel instance */ \ | ||
38 | umc_reg_offset = adev->umc.channel_offs * channel_inst; \ | ||
39 | /* get channel index of interleaved memory */ \ | ||
40 | channel_index = adev->umc.channel_idx_tbl[ \ | ||
41 | umc_inst * adev->umc.channel_inst_num + channel_inst]; \ | ||
42 | (func)(adev, err_data, umc_reg_offset, channel_index); \ | ||
43 | } \ | ||
44 | } \ | ||
45 | adev->umc.funcs->disable_umc_index_mode(adev); | ||
46 | |||
24 | struct amdgpu_umc_funcs { | 47 | struct amdgpu_umc_funcs { |
25 | void (*ras_init)(struct amdgpu_device *adev); | 48 | void (*ras_init)(struct amdgpu_device *adev); |
26 | void (*query_ras_error_count)(struct amdgpu_device *adev, | 49 | void (*query_ras_error_count)(struct amdgpu_device *adev, |