aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3930-drm-amdgpu-move-sdma-ecc-functions-to-generic-sdma-f.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3930-drm-amdgpu-move-sdma-ecc-functions-to-generic-sdma-f.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3930-drm-amdgpu-move-sdma-ecc-functions-to-generic-sdma-f.patch117
1 files changed, 117 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3930-drm-amdgpu-move-sdma-ecc-functions-to-generic-sdma-f.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3930-drm-amdgpu-move-sdma-ecc-functions-to-generic-sdma-f.patch
new file mode 100644
index 00000000..cef5ea9c
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3930-drm-amdgpu-move-sdma-ecc-functions-to-generic-sdma-f.patch
@@ -0,0 +1,117 @@
+From ad4ef9903771a4416b57fefc427467b2b1cb2bac Mon Sep 17 00:00:00 2001
+From: Tao Zhou <tao.zhou1@amd.com>
+Date: Thu, 12 Sep 2019 14:28:18 +0800
+Subject: [PATCH 3930/4256] drm/amdgpu: move sdma ecc functions to generic sdma
+ file
+
+sdma ras ecc functions can be reused among all sdma generations
+
+Signed-off-by: Tao Zhou <tao.zhou1@amd.com>
+Reviewed-by: Guchun Chen <guchun.chen@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c | 28 ++++++++++++++++++++++++
+ drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h | 6 +++++
+ drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c | 24 ++------------------
+ 3 files changed, 36 insertions(+), 22 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c
+index a25301b75ef7..b294157c1deb 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c
+@@ -135,3 +135,31 @@ int amdgpu_sdma_ras_late_init(struct amdgpu_device *adev,
+ adev->sdma.ras_if = NULL;
+ return r;
+ }
++
++int amdgpu_sdma_process_ras_data_cb(struct amdgpu_device *adev,
++ void *err_data,
++ struct amdgpu_iv_entry *entry)
++{
++ kgd2kfd_set_sram_ecc_flag(adev->kfd.dev);
++ amdgpu_ras_reset_gpu(adev, 0);
++
++ return AMDGPU_RAS_SUCCESS;
++}
++
++int amdgpu_sdma_process_ecc_irq(struct amdgpu_device *adev,
++ struct amdgpu_irq_src *source,
++ struct amdgpu_iv_entry *entry)
++{
++ struct ras_common_if *ras_if = adev->sdma.ras_if;
++ struct ras_dispatch_if ih_data = {
++ .entry = entry,
++ };
++
++ if (!ras_if)
++ return 0;
++
++ ih_data.head = *ras_if;
++
++ amdgpu_ras_interrupt_dispatch(adev, &ih_data);
++ return 0;
++}
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h
+index 79dcb907d00d..95e01d522537 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h
+@@ -106,4 +106,10 @@ int amdgpu_sdma_get_index_from_ring(struct amdgpu_ring *ring, uint32_t *index);
+ uint64_t amdgpu_sdma_get_csa_mc_addr(struct amdgpu_ring *ring, unsigned vmid);
+ int amdgpu_sdma_ras_late_init(struct amdgpu_device *adev,
+ void *ras_ih_info);
++int amdgpu_sdma_process_ras_data_cb(struct amdgpu_device *adev,
++ void *err_data,
++ struct amdgpu_iv_entry *entry);
++int amdgpu_sdma_process_ecc_irq(struct amdgpu_device *adev,
++ struct amdgpu_irq_src *source,
++ struct amdgpu_iv_entry *entry);
+ #endif
+diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
+index 4bb17d85a0ce..ca30cbfad59f 100644
+--- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
+@@ -1960,32 +1960,12 @@ static int sdma_v4_0_process_ras_data_cb(struct amdgpu_device *adev,
+ return 0;
+ }
+
+- kgd2kfd_set_sram_ecc_flag(adev->kfd.dev);
+-
+- amdgpu_ras_reset_gpu(adev, 0);
++ amdgpu_sdma_process_ras_data_cb(adev, err_data, entry);
+ }
+
+ return AMDGPU_RAS_SUCCESS;
+ }
+
+-static int sdma_v4_0_process_ecc_irq(struct amdgpu_device *adev,
+- struct amdgpu_irq_src *source,
+- struct amdgpu_iv_entry *entry)
+-{
+- struct ras_common_if *ras_if = adev->sdma.ras_if;
+- struct ras_dispatch_if ih_data = {
+- .entry = entry,
+- };
+-
+- if (!ras_if)
+- return 0;
+-
+- ih_data.head = *ras_if;
+-
+- amdgpu_ras_interrupt_dispatch(adev, &ih_data);
+- return 0;
+-}
+-
+ static int sdma_v4_0_process_illegal_inst_irq(struct amdgpu_device *adev,
+ struct amdgpu_irq_src *source,
+ struct amdgpu_iv_entry *entry)
+@@ -2333,7 +2313,7 @@ static const struct amdgpu_irq_src_funcs sdma_v4_0_illegal_inst_irq_funcs = {
+
+ static const struct amdgpu_irq_src_funcs sdma_v4_0_ecc_irq_funcs = {
+ .set = sdma_v4_0_set_ecc_irq_state,
+- .process = sdma_v4_0_process_ecc_irq,
++ .process = amdgpu_sdma_process_ecc_irq,
+ };
+
+
+--
+2.17.1
+