aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2745-drm-amdkfd-Revert-codes-of-creating-SDMA-queue-on-sp.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2745-drm-amdkfd-Revert-codes-of-creating-SDMA-queue-on-sp.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2745-drm-amdkfd-Revert-codes-of-creating-SDMA-queue-on-sp.patch155
1 files changed, 155 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2745-drm-amdkfd-Revert-codes-of-creating-SDMA-queue-on-sp.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2745-drm-amdkfd-Revert-codes-of-creating-SDMA-queue-on-sp.patch
new file mode 100644
index 00000000..e11c8e26
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2745-drm-amdkfd-Revert-codes-of-creating-SDMA-queue-on-sp.patch
@@ -0,0 +1,155 @@
+From d584c11312113d6f8506af9461a73d623d5d7e8d Mon Sep 17 00:00:00 2001
+From: Oak Zeng <Oak.Zeng@amd.com>
+Date: Mon, 21 Jan 2019 10:18:05 -0600
+Subject: [PATCH 2745/2940] drm/amdkfd: Revert codes of creating SDMA queue on
+ specific engine
+
+The design changed.
+
+Change-Id: I5c38462726519f99cc9280548e432ac2b676fafe
+Signed-off-by: Oak Zeng <Oak.Zeng@amd.com>
+---
+ drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 26 +++++------------
+ .../drm/amd/amdkfd/kfd_device_queue_manager.c | 29 +++----------------
+ include/uapi/linux/kfd_ioctl.h | 4 ---
+ 3 files changed, 12 insertions(+), 47 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
+index ed19cbb618dd..a34c8cea1fb7 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
+@@ -161,8 +161,7 @@ static int kfd_ioctl_get_version(struct file *filep, struct kfd_process *p,
+ return 0;
+ }
+
+-static int set_queue_properties_from_user(struct kfd_dev *dev,
+- struct queue_properties *q_properties,
++static int set_queue_properties_from_user(struct queue_properties *q_properties,
+ struct kfd_ioctl_create_queue_args *args)
+ {
+ if (args->queue_percentage > KFD_MAX_QUEUE_PERCENTAGE) {
+@@ -232,21 +231,12 @@ static int set_queue_properties_from_user(struct kfd_dev *dev,
+ q_properties->ctx_save_restore_area_size = args->ctx_save_restore_size;
+ q_properties->ctl_stack_size = args->ctl_stack_size;
+ if (args->queue_type == KFD_IOC_QUEUE_TYPE_COMPUTE ||
+- args->queue_type == KFD_IOC_QUEUE_TYPE_COMPUTE_AQL) {
++ args->queue_type == KFD_IOC_QUEUE_TYPE_COMPUTE_AQL)
+ q_properties->type = KFD_QUEUE_TYPE_COMPUTE;
+- } else if (args->queue_type == KFD_IOC_QUEUE_TYPE_SDMA) {
+- q_properties->sdma_engine_id =
+- dev->device_info->num_sdma_engines;
++ else if (args->queue_type == KFD_IOC_QUEUE_TYPE_SDMA)
+ q_properties->type = KFD_QUEUE_TYPE_SDMA;
+- } else if (args->queue_type >= KFD_IOC_QUEUE_TYPE_SDMA_ENGINE(0) &&
+- args->queue_type < KFD_IOC_QUEUE_TYPE_SDMA_ENGINE(
+- dev->device_info->num_sdma_engines)) {
+- q_properties->sdma_engine_id =
+- args->queue_type - KFD_IOC_QUEUE_TYPE_SDMA_ENGINE(0);
+- q_properties->type = KFD_QUEUE_TYPE_SDMA;
+- } else {
++ else
+ return -ENOTSUPP;
+- }
+
+ if (args->queue_type == KFD_IOC_QUEUE_TYPE_COMPUTE_AQL)
+ q_properties->format = KFD_QUEUE_FORMAT_AQL;
+@@ -293,6 +283,10 @@ static int kfd_ioctl_create_queue(struct file *filep, struct kfd_process *p,
+
+ pr_debug("Creating queue ioctl\n");
+
++ err = set_queue_properties_from_user(&q_properties, args);
++ if (err)
++ return err;
++
+ pr_debug("Looking for gpu id 0x%x\n", args->gpu_id);
+ dev = kfd_device_by_id(args->gpu_id);
+ if (!dev) {
+@@ -300,10 +294,6 @@ static int kfd_ioctl_create_queue(struct file *filep, struct kfd_process *p,
+ return -EINVAL;
+ }
+
+- err = set_queue_properties_from_user(dev, &q_properties, args);
+- if (err)
+- return err;
+-
+ mutex_lock(&p->mutex);
+
+ pdd = kfd_bind_process_to_device(dev, p);
+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 f53b8fa87b0b..ddaa64b726a0 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
+@@ -908,33 +908,14 @@ static int stop_nocpsch(struct device_queue_manager *dqm)
+ }
+
+ static int allocate_sdma_queue(struct device_queue_manager *dqm,
+- unsigned int sdma_engine_id,
+ unsigned int *sdma_id)
+ {
+- int bit = -1;
++ int bit;
+
+ if (dqm->sdma_bitmap == 0)
+ return -ENOMEM;
+
+- /* If sdma_engine_id is valid,
+- * allocate queue on specific engine
+- */
+- if (sdma_engine_id < get_num_sdma_engines(dqm)) {
+- unsigned int i;
+-
+- for (i = sdma_engine_id; i < get_num_sdma_queues(dqm);
+- i += get_num_sdma_engines(dqm)) {
+- if (dqm->sdma_bitmap & (1<<i)) {
+- bit = i;
+- break;
+- }
+- }
+- if (bit == -1)
+- return -EBUSY;
+- /* Otherwise allocate from any engine */
+- } else {
+- bit = __ffs64(dqm->sdma_bitmap);
+- }
++ bit = __ffs64(dqm->sdma_bitmap);
+
+ dqm->sdma_bitmap &= ~(1ULL << bit);
+ *sdma_id = bit;
+@@ -959,8 +940,7 @@ static int create_sdma_queue_nocpsch(struct device_queue_manager *dqm,
+
+ mqd_mgr = dqm->mqd_mgrs[KFD_MQD_TYPE_SDMA];
+
+- retval = allocate_sdma_queue(dqm, q->properties.sdma_engine_id,
+- &q->sdma_id);
++ retval = allocate_sdma_queue(dqm, &q->sdma_id);
+ if (retval)
+ return retval;
+
+@@ -1180,8 +1160,7 @@ static int create_queue_cpsch(struct device_queue_manager *dqm, struct queue *q,
+ }
+
+ if (q->properties.type == KFD_QUEUE_TYPE_SDMA) {
+- retval = allocate_sdma_queue(dqm, q->properties.sdma_engine_id,
+- &q->sdma_id);
++ retval = allocate_sdma_queue(dqm, &q->sdma_id);
+ if (retval)
+ goto out_unlock;
+ q->properties.sdma_queue_id =
+diff --git a/include/uapi/linux/kfd_ioctl.h b/include/uapi/linux/kfd_ioctl.h
+index 816dc69b8a49..d8fca2c27366 100644
+--- a/include/uapi/linux/kfd_ioctl.h
++++ b/include/uapi/linux/kfd_ioctl.h
+@@ -38,10 +38,6 @@ struct kfd_ioctl_get_version_args {
+ #define KFD_IOC_QUEUE_TYPE_COMPUTE 0x0
+ #define KFD_IOC_QUEUE_TYPE_SDMA 0x1
+ #define KFD_IOC_QUEUE_TYPE_COMPUTE_AQL 0x2
+-#define KFD_IOC_QUEUE_TYPE_SDMA_ENGINE(e) (0x10000 + (e))
+-#define KFD_IOC_QUEUE_TYPE_SDMA_AQL_ENGINE(e) (0x20000 + (e))
+-#define KFD_IOC_QUEUE_TYPE_SDMA_ENGINE_MAX (KFD_IOC_QUEUE_TYPE_SDMA_ENGINE(0xffff))
+-#define KFD_IOC_QUEUE_TYPE_SDMA_AQL_ENGINE_MAX (KFD_IOC_QUEUE_TYPE_SDMA_AQL_ENGINE(0xffff))
+
+ #define KFD_MAX_QUEUE_PERCENTAGE 100
+ #define KFD_MAX_QUEUE_PRIORITY 15
+--
+2.17.1
+