aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2087-drm-amdgpu-cleanup-in_sriov_reset-and-lock_reset.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2087-drm-amdgpu-cleanup-in_sriov_reset-and-lock_reset.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2087-drm-amdgpu-cleanup-in_sriov_reset-and-lock_reset.patch193
1 files changed, 193 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2087-drm-amdgpu-cleanup-in_sriov_reset-and-lock_reset.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2087-drm-amdgpu-cleanup-in_sriov_reset-and-lock_reset.patch
new file mode 100644
index 00000000..16a0964b
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2087-drm-amdgpu-cleanup-in_sriov_reset-and-lock_reset.patch
@@ -0,0 +1,193 @@
+From e4b765c3e6cf74dc3f084269732a695a8716c055 Mon Sep 17 00:00:00 2001
+From: Monk Liu <Monk.Liu@amd.com>
+Date: Tue, 17 Oct 2017 15:11:12 +0800
+Subject: [PATCH 2087/4131] drm/amdgpu:cleanup in_sriov_reset and lock_reset
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+since now gpu reset is unified with gpu_recover
+for both bare-metal and SR-IOV:
+
+1)rename in_sriov_reset to in_gpu_reset
+2)move lock_reset from adev->virt to adev
+
+Change-Id: I9f4dbab9a4c916fbc156f669824d15ddcd0f2322
+Signed-off-by: Monk Liu <Monk.Liu@amd.com>
+Reviewed-by: Christian König <christian.koenig@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu.h | 3 ++-
+ drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 9 +++++----
+ drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 2 +-
+ drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c | 2 +-
+ drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 2 --
+ drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h | 1 -
+ drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 6 +++---
+ drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 6 +++---
+ 8 files changed, 15 insertions(+), 16 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+index d35e308..95f5614 100755
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+@@ -1717,7 +1717,8 @@ struct amdgpu_device {
+
+ /* record last mm index being written through WREG32*/
+ unsigned long last_mm_index;
+- bool in_sriov_reset;
++ bool in_gpu_reset;
++ struct mutex lock_reset;
+ };
+
+ static inline struct amdgpu_device *amdgpu_ttm_adev(struct ttm_bo_device *bdev)
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+index 9e177b2..c8c6183 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+@@ -2187,6 +2187,7 @@ int amdgpu_device_init(struct amdgpu_device *adev,
+ mutex_init(&adev->mn_lock);
+ mutex_init(&adev->virt.vf_errors.lock);
+ hash_init(adev->mn_hash);
++ mutex_init(&adev->lock_reset);
+
+ amdgpu_check_arguments(adev);
+
+@@ -3017,9 +3018,9 @@ int amdgpu_gpu_recover(struct amdgpu_device *adev, struct amdgpu_job *job)
+
+ dev_info(adev->dev, "GPU reset begin!\n");
+
+- mutex_lock(&adev->virt.lock_reset);
++ mutex_lock(&adev->lock_reset);
+ atomic_inc(&adev->gpu_reset_counter);
+- adev->in_sriov_reset = 1;
++ adev->in_gpu_reset = 1;
+
+ /* block TTM */
+ resched = ttm_bo_lock_delayed_workqueue(&adev->mman.bdev);
+@@ -3129,8 +3130,8 @@ int amdgpu_gpu_recover(struct amdgpu_device *adev, struct amdgpu_job *job)
+ }
+
+ amdgpu_vf_error_trans_all(adev);
+- adev->in_sriov_reset = 0;
+- mutex_unlock(&adev->virt.lock_reset);
++ adev->in_gpu_reset = 0;
++ mutex_unlock(&adev->lock_reset);
+ return r;
+ }
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
+index fe1252c..c367f8d 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
+@@ -269,7 +269,7 @@ static int psp_hw_start(struct psp_context *psp)
+ struct amdgpu_device *adev = psp->adev;
+ int ret;
+
+- if (!amdgpu_sriov_vf(adev) || !adev->in_sriov_reset) {
++ if (!amdgpu_sriov_vf(adev) || !adev->in_gpu_reset) {
+ ret = psp_bootloader_load_sysdrv(psp);
+ if (ret)
+ return ret;
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
+index 6564902..edc37cc 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
+@@ -370,7 +370,7 @@ int amdgpu_ucode_init_bo(struct amdgpu_device *adev)
+ return 0;
+ }
+
+- if (!amdgpu_sriov_vf(adev) || !adev->in_sriov_reset) {
++ if (!amdgpu_sriov_vf(adev) || !adev->in_gpu_reset) {
+ err = amdgpu_bo_create(adev, adev->firmware.fw_size, PAGE_SIZE, true,
+ amdgpu_sriov_vf(adev) ? AMDGPU_GEM_DOMAIN_VRAM : AMDGPU_GEM_DOMAIN_GTT,
+ AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
+index fee08af..f791518 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
+@@ -115,8 +115,6 @@ void amdgpu_virt_init_setting(struct amdgpu_device *adev)
+ adev->enable_virtual_display = true;
+ adev->cg_flags = 0;
+ adev->pg_flags = 0;
+-
+- mutex_init(&adev->virt.lock_reset);
+ }
+
+ uint32_t amdgpu_virt_kiq_rreg(struct amdgpu_device *adev, uint32_t reg)
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h
+index 20bdb8f..e3f78f5 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h
+@@ -239,7 +239,6 @@ struct amdgpu_virt {
+ uint64_t csa_vmid0_addr;
+ bool chained_ib_support;
+ uint32_t reg_val_offs;
+- struct mutex lock_reset;
+ struct amdgpu_irq_src ack_irq;
+ struct amdgpu_irq_src rcv_irq;
+ struct work_struct flr_work;
+diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
+index ea9e054..9fe7f39 100644
+--- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
+@@ -4818,7 +4818,7 @@ static int gfx_v8_0_kiq_init_queue(struct amdgpu_ring *ring)
+
+ gfx_v8_0_kiq_setting(ring);
+
+- if (adev->in_sriov_reset) { /* for GPU_RESET case */
++ if (adev->in_gpu_reset) { /* for GPU_RESET case */
+ /* reset MQD to a clean status */
+ if (adev->gfx.mec.mqd_backup[mqd_idx])
+ memcpy(mqd, adev->gfx.mec.mqd_backup[mqd_idx], sizeof(struct vi_mqd_allocation));
+@@ -4855,7 +4855,7 @@ static int gfx_v8_0_kcq_init_queue(struct amdgpu_ring *ring)
+ struct vi_mqd *mqd = ring->mqd_ptr;
+ int mqd_idx = ring - &adev->gfx.compute_ring[0];
+
+- if (!adev->in_sriov_reset && !adev->gfx.in_suspend) {
++ if (!adev->in_gpu_reset && !adev->gfx.in_suspend) {
+ memset((void *)mqd, 0, sizeof(struct vi_mqd_allocation));
+ ((struct vi_mqd_allocation *)mqd)->dynamic_cu_mask = 0xFFFFFFFF;
+ ((struct vi_mqd_allocation *)mqd)->dynamic_rb_mask = 0xFFFFFFFF;
+@@ -4867,7 +4867,7 @@ static int gfx_v8_0_kcq_init_queue(struct amdgpu_ring *ring)
+
+ if (adev->gfx.mec.mqd_backup[mqd_idx])
+ memcpy(adev->gfx.mec.mqd_backup[mqd_idx], mqd, sizeof(struct vi_mqd_allocation));
+- } else if (adev->in_sriov_reset) { /* for GPU_RESET case */
++ } else if (adev->in_gpu_reset) { /* for GPU_RESET case */
+ /* reset MQD to a clean status */
+ if (adev->gfx.mec.mqd_backup[mqd_idx])
+ memcpy(mqd, adev->gfx.mec.mqd_backup[mqd_idx], sizeof(struct vi_mqd_allocation));
+diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
+index 072c338..93c87a4 100644
+--- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
+@@ -2740,7 +2740,7 @@ static int gfx_v9_0_kiq_init_queue(struct amdgpu_ring *ring)
+
+ gfx_v9_0_kiq_setting(ring);
+
+- if (adev->in_sriov_reset) { /* for GPU_RESET case */
++ if (adev->in_gpu_reset) { /* for GPU_RESET case */
+ /* reset MQD to a clean status */
+ if (adev->gfx.mec.mqd_backup[mqd_idx])
+ memcpy(mqd, adev->gfx.mec.mqd_backup[mqd_idx], sizeof(struct v9_mqd_allocation));
+@@ -2778,7 +2778,7 @@ static int gfx_v9_0_kcq_init_queue(struct amdgpu_ring *ring)
+ struct v9_mqd *mqd = ring->mqd_ptr;
+ int mqd_idx = ring - &adev->gfx.compute_ring[0];
+
+- if (!adev->in_sriov_reset && !adev->gfx.in_suspend) {
++ if (!adev->in_gpu_reset && !adev->gfx.in_suspend) {
+ memset((void *)mqd, 0, sizeof(struct v9_mqd_allocation));
+ ((struct v9_mqd_allocation *)mqd)->dynamic_cu_mask = 0xFFFFFFFF;
+ ((struct v9_mqd_allocation *)mqd)->dynamic_rb_mask = 0xFFFFFFFF;
+@@ -2790,7 +2790,7 @@ static int gfx_v9_0_kcq_init_queue(struct amdgpu_ring *ring)
+
+ if (adev->gfx.mec.mqd_backup[mqd_idx])
+ memcpy(adev->gfx.mec.mqd_backup[mqd_idx], mqd, sizeof(struct v9_mqd_allocation));
+- } else if (adev->in_sriov_reset) { /* for GPU_RESET case */
++ } else if (adev->in_gpu_reset) { /* for GPU_RESET case */
+ /* reset MQD to a clean status */
+ if (adev->gfx.mec.mqd_backup[mqd_idx])
+ memcpy(mqd, adev->gfx.mec.mqd_backup[mqd_idx], sizeof(struct v9_mqd_allocation));
+--
+2.7.4
+