diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1137-drm-amdkfd-Reset-waves-when-dequeueing-HQD.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1137-drm-amdkfd-Reset-waves-when-dequeueing-HQD.patch | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1137-drm-amdkfd-Reset-waves-when-dequeueing-HQD.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1137-drm-amdkfd-Reset-waves-when-dequeueing-HQD.patch new file mode 100644 index 00000000..e5672515 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1137-drm-amdkfd-Reset-waves-when-dequeueing-HQD.patch @@ -0,0 +1,121 @@ +From 07fae574d6f75d35d5ad75fd74dc44a07cb5d238 Mon Sep 17 00:00:00 2001 +From: Yong Zhao <yong.zhao@amd.com> +Date: Fri, 13 May 2016 19:10:52 -0400 +Subject: [PATCH 1137/4131] drm/amdkfd: Reset waves when dequeueing HQD + +In SW scheduler mode, DEQUEUE_REQ bit in CP_HQD_DEQUEUE_REQUEST +should be set as 2 instead of 1 when dequeueing HQD. + +Meanwhile, when uninitializing a kernel queue, the incorrect value +of a parameter in destoy_mqd() would lead to HQD not dequeued +properly. It is fixed as well in the commit. + +Change-Id: I3d2813099f3a39397727eff1dc677539a99dc59d +Signed-off-by: Yong Zhao <yong.zhao@amd.com> + + Conflicts: + drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c + drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.h +--- + drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 4 ++-- + drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.h | 5 ++++- + drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c | 2 +- + drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c | 2 +- + drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 8 -------- + 5 files changed, 8 insertions(+), 13 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c +index f92c01b..c8fd16c 100644 +--- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c ++++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c +@@ -350,7 +350,7 @@ static int destroy_queue_nocpsch(struct device_queue_manager *dqm, + + retval = mqd->destroy_mqd(mqd, q->mqd, + KFD_PREEMPT_TYPE_WAVEFRONT_RESET, +- QUEUE_PREEMPT_DEFAULT_TIMEOUT_MS, ++ KFD_HIQ_TIMEOUT, + q->pipe, q->queue); + + if (retval != 0) +@@ -1392,7 +1392,7 @@ static int process_termination_nocpsch(struct device_queue_manager *dqm, + dqm->total_queue_count--; + mqd->destroy_mqd(mqd, q->mqd, + KFD_PREEMPT_TYPE_WAVEFRONT_RESET, +- QUEUE_PREEMPT_DEFAULT_TIMEOUT_MS, ++ KFD_HIQ_TIMEOUT, + q->pipe, q->queue); + mqd->uninit_mqd(mqd, q->mqd, q->mqd_mem_obj); + if (list_empty(&qpd->queues_list)) +diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.h b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.h +index 22bc0b7..97a739a 100644 +--- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.h ++++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.h +@@ -29,7 +29,10 @@ + #include "kfd_priv.h" + #include "kfd_mqd_manager.h" + +-#define QUEUE_PREEMPT_DEFAULT_TIMEOUT_MS (9000) ++#define KFD_HIQ_TIMEOUT (500) ++#define KFD_UNMAP_LATENCY_MS (4000) ++#define QUEUE_PREEMPT_DEFAULT_TIMEOUT_MS (2 * KFD_UNMAP_LATENCY_MS + 1000) ++ + #define KFD_DQM_FIRST_PIPE (0) + #define CIK_SDMA_QUEUES (4) + #define CIK_SDMA_QUEUES_PER_ENGINE (2) +diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c +index fbee118..fc4d8b2 100644 +--- a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c ++++ b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c +@@ -185,7 +185,7 @@ static void uninitialize(struct kernel_queue *kq) + if (kq->queue->properties.type == KFD_QUEUE_TYPE_HIQ) + kq->mqd->destroy_mqd(kq->mqd, + NULL, +- false, ++ KFD_PREEMPT_TYPE_WAVEFRONT_RESET, + QUEUE_PREEMPT_DEFAULT_TIMEOUT_MS, + kq->queue->pipe, + kq->queue->queue); +diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c +index 89f6bb1..07b11f2 100644 +--- a/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c ++++ b/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c +@@ -636,7 +636,7 @@ int pm_send_set_resources(struct packet_manager *pm, + packet->bitfields2.queue_type = + queue_type__mes_set_resources__hsa_interface_queue_hiq; + packet->bitfields2.vmid_mask = res->vmid_mask; +- packet->bitfields2.unmap_latency = KFD_UNMAP_LATENCY; ++ packet->bitfields2.unmap_latency = KFD_UNMAP_LATENCY_MS / 100; + packet->bitfields7.oac_mask = res->oac_mask; + packet->bitfields8.gds_heap_base = res->gds_heap_base; + packet->bitfields8.gds_heap_size = res->gds_heap_size; +diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h +index e60f20f..8f9f641 100644 +--- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h ++++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h +@@ -316,11 +316,6 @@ enum kfd_unmap_queues_filter { + KFD_UNMAP_QUEUES_FILTER_BY_PASID + }; + +-enum kfd_preempt_type { +- KFD_PREEMPT_TYPE_WAVEFRONT, +- KFD_PREEMPT_TYPE_WAVEFRONT_RESET +-}; +- + /** + * enum kfd_queue_type + * +@@ -816,11 +811,8 @@ int kgd2kfd_resume_mm(struct kfd_dev *kfd, struct mm_struct *mm); + + /* Packet Manager */ + +-#define KFD_HIQ_TIMEOUT (500) +- + #define KFD_FENCE_COMPLETED (100) + #define KFD_FENCE_INIT (10) +-#define KFD_UNMAP_LATENCY (40) + + struct packet_manager_firmware; + +-- +2.7.4 + |