aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2752-drm-amdkfd-use-init_mqd-function-to-allocate-object-.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2752-drm-amdkfd-use-init_mqd-function-to-allocate-object-.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2752-drm-amdkfd-use-init_mqd-function-to-allocate-object-.patch111
1 files changed, 111 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2752-drm-amdkfd-use-init_mqd-function-to-allocate-object-.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2752-drm-amdkfd-use-init_mqd-function-to-allocate-object-.patch
new file mode 100644
index 00000000..24aff640
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2752-drm-amdkfd-use-init_mqd-function-to-allocate-object-.patch
@@ -0,0 +1,111 @@
+From 3c8c64fa9f5449be46923bede710b7b8512d1e44 Mon Sep 17 00:00:00 2001
+From: Kevin Wang <kevin1.wang@amd.com>
+Date: Fri, 22 Feb 2019 12:36:49 +0800
+Subject: [PATCH 2752/2940] drm/amdkfd: use init_mqd function to allocate
+ object for hid_mqd (CI)
+
+if use the legacy method to allocate object, when mqd_hiq need to run
+uninit code, it will be cause WARNING call trace.
+
+eg: (s3 suspend test)
+[ 34.918944] Call Trace:
+[ 34.918948] [<ffffffff92961dc1>] dump_stack+0x19/0x1b
+[ 34.918950] [<ffffffff92297648>] __warn+0xd8/0x100
+[ 34.918951] [<ffffffff9229778d>] warn_slowpath_null+0x1d/0x20
+[ 34.918991] [<ffffffffc03ce1fe>] uninit_mqd_hiq_sdma+0x4e/0x50 [amdgpu]
+[ 34.919028] [<ffffffffc03d0ef7>] uninitialize+0x37/0xe0 [amdgpu]
+[ 34.919064] [<ffffffffc03d15a6>] kernel_queue_uninit+0x16/0x30 [amdgpu]
+[ 34.919086] [<ffffffffc03d26c2>] pm_uninit+0x12/0x20 [amdgpu]
+[ 34.919107] [<ffffffffc03d4915>] stop_nocpsch+0x15/0x20 [amdgpu]
+[ 34.919129] [<ffffffffc03c1dce>] kgd2kfd_suspend.part.4+0x2e/0x50 [amdgpu]
+[ 34.919150] [<ffffffffc03c2667>] kgd2kfd_suspend+0x17/0x20 [amdgpu]
+[ 34.919171] [<ffffffffc03c103a>] amdgpu_amdkfd_suspend+0x1a/0x20 [amdgpu]
+[ 34.919187] [<ffffffffc02ec428>] amdgpu_device_suspend+0x88/0x3a0 [amdgpu]
+[ 34.919189] [<ffffffff922e22cf>] ? enqueue_entity+0x2ef/0xbe0
+[ 34.919205] [<ffffffffc02e8220>] amdgpu_pmops_suspend+0x20/0x30 [amdgpu]
+[ 34.919207] [<ffffffff925c56ff>] pci_pm_suspend+0x6f/0x150
+[ 34.919208] [<ffffffff925c5690>] ? pci_pm_freeze+0xf0/0xf0
+[ 34.919210] [<ffffffff926b45c6>] dpm_run_callback+0x46/0x90
+[ 34.919212] [<ffffffff926b49db>] __device_suspend+0xfb/0x2a0
+[ 34.919213] [<ffffffff926b4b9f>] async_suspend+0x1f/0xa0
+[ 34.919214] [<ffffffff922c918f>] async_run_entry_fn+0x3f/0x130
+[ 34.919216] [<ffffffff922b9d4f>] process_one_work+0x17f/0x440
+[ 34.919217] [<ffffffff922bade6>] worker_thread+0x126/0x3c0
+[ 34.919218] [<ffffffff922bacc0>] ? manage_workers.isra.25+0x2a0/0x2a0
+[ 34.919220] [<ffffffff922c1c31>] kthread+0xd1/0xe0
+[ 34.919221] [<ffffffff922c1b60>] ? insert_kthread_work+0x40/0x40
+[ 34.919222] [<ffffffff92974c1d>] ret_from_fork_nospec_begin+0x7/0x21
+[ 34.919224] [<ffffffff922c1b60>] ? insert_kthread_work+0x40/0x40
+[ 34.919224] ---[ end trace 38cd9f65c963adad ]---
+
+Signed-off-by: Kevin Wang <kevin1.wang@amd.com>
+Reviewed-by: Oak Zeng <Oak.Zeng@amd.com>
+---
+ .../gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c | 51 +------------------
+ 1 file changed, 1 insertion(+), 50 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c
+index 379e72e9591c..c44ede9c3945 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c
+@@ -366,56 +366,7 @@ static int init_mqd_hiq(struct mqd_manager *mm, void **mqd,
+ struct kfd_mem_obj **mqd_mem_obj, uint64_t *gart_addr,
+ struct queue_properties *q)
+ {
+- uint64_t addr;
+- struct cik_mqd *m;
+- int retval;
+-
+- retval = kfd_gtt_sa_allocate(mm->dev, sizeof(struct cik_mqd),
+- mqd_mem_obj);
+-
+- if (retval != 0)
+- return -ENOMEM;
+-
+- m = (struct cik_mqd *) (*mqd_mem_obj)->cpu_ptr;
+- addr = (*mqd_mem_obj)->gpu_addr;
+-
+- memset(m, 0, ALIGN(sizeof(struct cik_mqd), 256));
+-
+- m->header = 0xC0310800;
+- m->compute_pipelinestat_enable = 1;
+- m->compute_static_thread_mgmt_se0 = 0xFFFFFFFF;
+- m->compute_static_thread_mgmt_se1 = 0xFFFFFFFF;
+- m->compute_static_thread_mgmt_se2 = 0xFFFFFFFF;
+- m->compute_static_thread_mgmt_se3 = 0xFFFFFFFF;
+-
+- m->cp_hqd_persistent_state = DEFAULT_CP_HQD_PERSISTENT_STATE |
+- PRELOAD_REQ;
+- m->cp_hqd_quantum = QUANTUM_EN | QUANTUM_SCALE_1MS |
+- QUANTUM_DURATION(10);
+-
+- m->cp_mqd_control = MQD_CONTROL_PRIV_STATE_EN;
+- m->cp_mqd_base_addr_lo = lower_32_bits(addr);
+- m->cp_mqd_base_addr_hi = upper_32_bits(addr);
+-
+- m->cp_hqd_ib_control = DEFAULT_MIN_IB_AVAIL_SIZE;
+-
+- /*
+- * Pipe Priority
+- * Identifies the pipe relative priority when this queue is connected
+- * to the pipeline. The pipe priority is against the GFX pipe and HP3D.
+- * In KFD we are using a fixed pipe priority set to CS_MEDIUM.
+- * 0 = CS_LOW (typically below GFX)
+- * 1 = CS_MEDIUM (typically between HP3D and GFX
+- * 2 = CS_HIGH (typically above HP3D)
+- */
+- set_priority(m, q);
+-
+- *mqd = m;
+- if (gart_addr)
+- *gart_addr = addr;
+- retval = mm->update_mqd(mm, m, q);
+-
+- return retval;
++ return init_mqd(mm, mqd, mqd_mem_obj, gart_addr, q);
+ }
+
+ static int update_mqd_hiq(struct mqd_manager *mm, void *mqd,
+--
+2.17.1
+