aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/2745-drm-amdkfd-Revert-codes-of-creating-SDMA-queue-on-sp.patch
blob: e11c8e26cd64583e322ff3adc29500b55200196c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
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