aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3248-drm-amdgpu-add-macro-of-umc-for-each-channel.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3248-drm-amdgpu-add-macro-of-umc-for-each-channel.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3248-drm-amdgpu-add-macro-of-umc-for-each-channel.patch52
1 files changed, 52 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3248-drm-amdgpu-add-macro-of-umc-for-each-channel.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3248-drm-amdgpu-add-macro-of-umc-for-each-channel.patch
new file mode 100644
index 00000000..4f90532a
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3248-drm-amdgpu-add-macro-of-umc-for-each-channel.patch
@@ -0,0 +1,52 @@
+From 910bb3b65f4b3f4dd2f870ea86fcab335a84eda5 Mon Sep 17 00:00:00 2001
+From: Tao Zhou <tao.zhou1@amd.com>
+Date: Mon, 29 Jul 2019 14:50:35 +0800
+Subject: [PATCH 3248/4256] 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>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_umc.h | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+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 @@
+ #ifndef __AMDGPU_UMC_H__
+ #define __AMDGPU_UMC_H__
+
++/*
++ * void (*func)(struct amdgpu_device *adev, struct ras_err_data *err_data,
++ * uint32_t umc_reg_offset, uint32_t channel_index)
++ */
++#define amdgpu_umc_for_each_channel(func) \
++ struct ras_err_data *err_data = (struct ras_err_data *)ras_error_status; \
++ uint32_t umc_inst, channel_inst, umc_reg_offset, channel_index; \
++ for (umc_inst = 0; umc_inst < adev->umc.umc_inst_num; umc_inst++) { \
++ /* enable the index mode to query eror count per channel */ \
++ adev->umc.funcs->enable_umc_index_mode(adev, umc_inst); \
++ for (channel_inst = 0; \
++ channel_inst < adev->umc.channel_inst_num; \
++ channel_inst++) { \
++ /* calc the register offset according to channel instance */ \
++ umc_reg_offset = adev->umc.channel_offs * channel_inst; \
++ /* get channel index of interleaved memory */ \
++ channel_index = adev->umc.channel_idx_tbl[ \
++ umc_inst * adev->umc.channel_inst_num + channel_inst]; \
++ (func)(adev, err_data, umc_reg_offset, channel_index); \
++ } \
++ } \
++ adev->umc.funcs->disable_umc_index_mode(adev);
++
+ struct amdgpu_umc_funcs {
+ void (*ras_init)(struct amdgpu_device *adev);
+ void (*query_ras_error_count)(struct amdgpu_device *adev,
+--
+2.17.1
+