aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1120-Make-to-stock-kfd-driver.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1120-Make-to-stock-kfd-driver.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1120-Make-to-stock-kfd-driver.patch126
1 files changed, 126 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1120-Make-to-stock-kfd-driver.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1120-Make-to-stock-kfd-driver.patch
new file mode 100644
index 00000000..66c5efd1
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1120-Make-to-stock-kfd-driver.patch
@@ -0,0 +1,126 @@
+From 0725474af32b57860a9f33e6bc4ab1d063a2ff50 Mon Sep 17 00:00:00 2001
+From: Sanjay R Mehta <sanju.mehta@amd.com>
+Date: Tue, 20 Feb 2018 14:32:01 +0530
+Subject: [PATCH 1120/4131] Make to stock kfd driver
+
+Signed-off-by: Sanjay R Mehta <sanju.mehta@amd.com>
+---
+ drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 2 --
+ drivers/gpu/drm/amd/amdkfd/kfd_events.c | 5 +----
+ drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c | 22 +++++-----------------
+ drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 1 -
+ .../gpu/drm/amd/amdkfd/kfd_process_queue_manager.c | 1 +
+ 5 files changed, 7 insertions(+), 24 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
+index 8a05efa..abdafb9 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
+@@ -893,8 +893,6 @@ static int kfd_ioctl_get_tile_config(struct file *filep,
+ int err = 0;
+
+ dev = kfd_device_by_id(args->gpu_id);
+- if (!dev)
+- return -EINVAL;
+
+ dev->kfd2kgd->get_tile_config(dev->kgd, &config);
+
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_events.c b/drivers/gpu/drm/amd/amdkfd/kfd_events.c
+index 944abfa..5979158 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_events.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_events.c
+@@ -292,10 +292,7 @@ static int create_signal_event(struct file *devkfd,
+ struct kfd_event *ev)
+ {
+ if (p->signal_event_count == KFD_SIGNAL_EVENT_LIMIT) {
+- if (!p->signal_event_limit_reached) {
+- pr_warn("Signal event wasn't created because limit was reached\n");
+- p->signal_event_limit_reached = true;
+- }
++ pr_warn("Signal event wasn't created because limit was reached\n");
+ return -ENOMEM;
+ }
+
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c
+index ed71ad4..681b639 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c
+@@ -183,8 +183,8 @@ static void uninitialize(struct kernel_queue *kq)
+ {
+ if (kq->queue->properties.type == KFD_QUEUE_TYPE_HIQ)
+ kq->mqd->destroy_mqd(kq->mqd,
+- kq->queue->mqd,
+- KFD_PREEMPT_TYPE_WAVEFRONT_RESET,
++ NULL,
++ false,
+ QUEUE_PREEMPT_DEFAULT_TIMEOUT_MS,
+ kq->queue->pipe,
+ kq->queue->queue);
+@@ -210,11 +210,6 @@ static int acquire_packet_buffer(struct kernel_queue *kq,
+ uint32_t wptr, rptr;
+ unsigned int *queue_address;
+
+- /* When rptr == wptr, the buffer is empty.
+- * When rptr == wptr + 1, the buffer is full.
+- * It is always rptr that advances to the position of wptr, rather than
+- * the opposite. So we can only use up to queue_size_dwords - 1 dwords.
+- */
+ rptr = *kq->rptr_kernel;
+ wptr = *kq->wptr_kernel;
+ queue_address = (unsigned int *)kq->pq_kernel_addr;
+@@ -224,10 +219,11 @@ static int acquire_packet_buffer(struct kernel_queue *kq,
+ pr_debug("wptr: %d\n", wptr);
+ pr_debug("queue_address 0x%p\n", queue_address);
+
+- available_size = (rptr + queue_size_dwords - 1 - wptr) %
++ available_size = (rptr - 1 - wptr + queue_size_dwords) %
+ queue_size_dwords;
+
+- if (packet_size_in_dwords > available_size) {
++ if (packet_size_in_dwords >= queue_size_dwords ||
++ packet_size_in_dwords >= available_size) {
+ /*
+ * make sure calling functions know
+ * acquire_packet_buffer() failed
+@@ -237,14 +233,6 @@ static int acquire_packet_buffer(struct kernel_queue *kq,
+ }
+
+ if (wptr + packet_size_in_dwords >= queue_size_dwords) {
+- /* make sure after rolling back to position 0, there is
+- * still enough space.
+- */
+- if (packet_size_in_dwords >= rptr) {
+- *buffer_ptr = NULL;
+- return -ENOMEM;
+- }
+- /* fill nops, roll back and start at position 0 */
+ while (wptr > 0) {
+ queue_address[wptr] = kq->nop_packet;
+ wptr = (wptr + 1) % queue_size_dwords;
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
+index b87e96c..b397ec7 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
+@@ -521,7 +521,6 @@ struct kfd_process {
+ struct list_head signal_event_pages;
+ u32 next_nonsignal_event_id;
+ size_t signal_event_count;
+- bool signal_event_limit_reached;
+ };
+
+ /**
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
+index f9a1a4d..4142d63 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
+@@ -143,6 +143,7 @@ int pqm_create_queue(struct process_queue_manager *pqm,
+ int num_queues = 0;
+ struct queue *cur;
+
++ memset(&q_properties, 0, sizeof(struct queue_properties));
+ memcpy(&q_properties, properties, sizeof(struct queue_properties));
+ q = NULL;
+ kq = NULL;
+--
+2.7.4
+