aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2612-drm-amdgpu-fix-MGPU-fan-boost-enablement-for-XGMI-re.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2612-drm-amdgpu-fix-MGPU-fan-boost-enablement-for-XGMI-re.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2612-drm-amdgpu-fix-MGPU-fan-boost-enablement-for-XGMI-re.patch89
1 files changed, 89 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2612-drm-amdgpu-fix-MGPU-fan-boost-enablement-for-XGMI-re.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2612-drm-amdgpu-fix-MGPU-fan-boost-enablement-for-XGMI-re.patch
new file mode 100644
index 00000000..f7f77dd9
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2612-drm-amdgpu-fix-MGPU-fan-boost-enablement-for-XGMI-re.patch
@@ -0,0 +1,89 @@
+From 03fdb2300c61cce4a1b619c925d6f384fc278866 Mon Sep 17 00:00:00 2001
+From: Evan Quan <evan.quan@amd.com>
+Date: Wed, 26 Jun 2019 10:53:39 +0800
+Subject: [PATCH 2612/2940] drm/amdgpu: fix MGPU fan boost enablement for XGMI
+ reset
+
+MGPU fan boost feature should not be enabled until all the
+devices from the same hive are all back from reset.
+
+Change-Id: I03a69434ff28f4eac209bd91320dde8a238a33cf
+Signed-off-by: Evan Quan <evan.quan@amd.com>
+Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu.h | 4 ++++
+ drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 13 +++++++++++++
+ drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 4 ++--
+ 3 files changed, 19 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+index 8e55e1c94317..57a8614f715d 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+@@ -1255,6 +1255,10 @@ int amdgpu_dm_display_resume(struct amdgpu_device *adev );
+ static inline int amdgpu_dm_display_resume(struct amdgpu_device *adev) { return 0; }
+ #endif
+
++
++void amdgpu_register_gpu_instance(struct amdgpu_device *adev);
++void amdgpu_unregister_gpu_instance(struct amdgpu_device *adev);
++
+ #include "amdgpu_object.h"
+
+ /* used by df_v3_6.c and amdgpu_pmu.c */
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+index cb59eec5ece3..6a87bafbe2f2 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+@@ -3559,6 +3559,12 @@ static int amdgpu_do_asic_reset(struct amdgpu_hive_info *hive,
+ if (vram_lost)
+ amdgpu_device_fill_reset_magic(tmp_adev);
+
++ /*
++ * Add this ASIC as tracked as reset was already
++ * complete successfully.
++ */
++ amdgpu_register_gpu_instance(tmp_adev);
++
+ r = amdgpu_device_ip_late_init(tmp_adev);
+ if (r)
+ goto out;
+@@ -3693,6 +3699,13 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
+ device_list_handle = &device_list;
+ }
+
++ /*
++ * Mark these ASICs to be reseted as untracked first
++ * And add them back after reset completed
++ */
++ list_for_each_entry(tmp_adev, device_list_handle, gmc.xgmi.head)
++ amdgpu_unregister_gpu_instance(tmp_adev);
++
+ /* block all schedulers and reset given job's ring */
+ list_for_each_entry(tmp_adev, device_list_handle, gmc.xgmi.head) {
+ for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
+index d39fbd00917e..c21b7d5d9c28 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
+@@ -41,7 +41,7 @@
+ #include "amdgpu_display.h"
+ #include "amdgpu_ras.h"
+
+-static void amdgpu_unregister_gpu_instance(struct amdgpu_device *adev)
++void amdgpu_unregister_gpu_instance(struct amdgpu_device *adev)
+ {
+ struct amdgpu_gpu_instance *gpu_instance;
+ int i;
+@@ -102,7 +102,7 @@ void amdgpu_driver_unload_kms(struct drm_device *dev)
+ dev->dev_private = NULL;
+ }
+
+-static void amdgpu_register_gpu_instance(struct amdgpu_device *adev)
++void amdgpu_register_gpu_instance(struct amdgpu_device *adev)
+ {
+ struct amdgpu_gpu_instance *gpu_instance;
+
+--
+2.17.1
+