aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTao Zhou <tao.zhou1@amd.com>2019-07-29 02:50:35 -0400
committerAlex Deucher <alexander.deucher@amd.com>2019-08-02 11:30:38 -0400
commitfee858ba5f96e6cbcbe8167444aeb6532519bb8c (patch)
treef0f6170274509402e04db6ada7ccfbfbbb69640d
parent3aacf4ea1102f24c8dc63eb6f3d734cbc8bad86e (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.h23
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
24struct amdgpu_umc_funcs { 47struct 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,