aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0813-drm-amd-amdgpu-DGMA-no-need-to-reserve-Gart-table-no.patch
blob: 6063abbbd38a69f8bac7c4e43715d39a8cb94dd0 (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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
From 1f4fff13e5589d772b2ad2dce7aebeb1c1ce61f1 Mon Sep 17 00:00:00 2001
From: Chaudhary Amit Kumar <chaudharyamit.kumar@amd.com>
Date: Wed, 17 Oct 2018 16:43:28 +0530
Subject: [PATCH 0813/4131] drm/amd/amdgpu: [DGMA] no need to reserve Gart
 table now for DGMA

only gtt size reservation is enough

Change-Id: I060da4249d15860e5efbe86076eaebbd0902de5d
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Reviewed-by: Flora Cui <Flora.Cui@amd.com>
Signed-off-by: Roger He <Hongbo.He@amd.com>
Signed-off-by: Kalyan Alle <kalyan.alle@amd.com>

Signed-off-by: Chaudhary Amit Kumar <chaudharyamit.kumar@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c    | 25 ++++---------------------
 drivers/gpu/drm/amd/amdgpu/amdgpu_object.c |  8 ++------
 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c    |  7 ++-----
 drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c     | 12 +++++-------
 include/uapi/drm/amdgpu_drm.h              | 12 ++++++++++--
 5 files changed, 23 insertions(+), 41 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
index a99545c..c6e5ecd 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
@@ -413,8 +413,7 @@ int amdgpu_gem_dgma_ioctl(struct drm_device *dev, void *data,
 	struct drm_gem_object *gobj;
 	struct amdgpu_bo *abo;
 	dma_addr_t *dma_addr;
-	uint32_t handle, flags;
-	uint64_t offset;
+	uint32_t handle;
 	int i, r = 0;
 
 	switch (args->op) {
@@ -427,31 +426,15 @@ int amdgpu_gem_dgma_ioctl(struct drm_device *dev, void *data,
 			return r;
 
 		abo = gem_to_amdgpu_bo(gobj);
-		r = amdgpu_bo_reserve(abo, true);
-		if (unlikely(r))
-			goto release_object;
-
 		dma_addr = kmalloc_array(abo->tbo.num_pages, sizeof(dma_addr_t), GFP_KERNEL);
-		if (unlikely(dma_addr == NULL)) {
-			amdgpu_bo_unreserve(abo);
+		if (unlikely(dma_addr == NULL))
 			goto release_object;
-		}
+
 		for (i = 0; i < abo->tbo.num_pages; i++)
 			dma_addr[i] = args->addr + i * PAGE_SIZE;
-
-		flags = amdgpu_ttm_tt_pte_flags(adev, abo->tbo.ttm, &abo->tbo.mem);
-
-		offset = amdgpu_bo_gpu_offset(abo);
-		offset -= adev->mman.bdev.man[TTM_PL_TT].gpu_offset;
-		r = amdgpu_gart_bind(adev, offset, abo->tbo.num_pages,
-					NULL, dma_addr, flags);
-		kfree(dma_addr);
-		amdgpu_bo_unreserve(abo);
-		if (unlikely(r))
-			goto release_object;
-
 		abo->tbo.mem.bus.base = args->addr;
 		abo->tbo.mem.bus.offset = 0;
+		abo->tbo.mem.bus.addr = (void *)dma_addr;
 
 		r = drm_gem_handle_create(filp, gobj, &handle);
 		args->handle = handle;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
index 8339fd4..67f1e3e 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
@@ -41,15 +41,11 @@ static void amdgpu_ttm_bo_destroy(struct ttm_buffer_object *tbo)
 {
 	struct amdgpu_device *adev = amdgpu_ttm_adev(tbo->bdev);
 	struct amdgpu_bo *bo;
-	u64 offset;
 
 	bo = container_of(tbo, struct amdgpu_bo, tbo);
 
-	if (bo->tbo.mem.mem_type == AMDGPU_PL_DGMA_IMPORT) {
-		offset = amdgpu_bo_gpu_offset(bo);
-		offset -= adev->mman.bdev.man[TTM_PL_TT].gpu_offset;
-		amdgpu_gart_unbind(adev, offset, bo->tbo.num_pages);
-	}
+	if (bo->tbo.mem.mem_type == AMDGPU_PL_DGMA_IMPORT)
+		kfree(tbo->mem.bus.addr);
 	amdgpu_bo_kunmap(bo);
 
 	if (bo->gem_base.import_attach)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index 1e6fe46..f017951 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -597,6 +597,7 @@ static int amdgpu_ttm_io_mem_reserve(struct ttm_bo_device *bdev, struct ttm_mem_
 		mem->bus.is_iomem = true;
 		break;
 	case AMDGPU_PL_DGMA_IMPORT:
+		mem->bus.addr = backup.bus.addr;
 		mem->bus.offset = backup.bus.offset;
 		mem->bus.base = backup.bus.base;
 		mem->bus.is_iomem = true;
@@ -1237,11 +1238,7 @@ static int amdgpu_direct_gma_init(struct amdgpu_device *adev)
 	struct ttm_mem_reg *mem = &adev->direct_gma.gart_mem;
 	struct amdgpu_bo *abo;
 	struct ttm_buffer_object gtt_bo;
-	struct ttm_place place = {
-		.fpfn = 0,
-		.lpfn = adev->mc.gart_size >> PAGE_SHIFT,
-		.flags = TTM_PL_FLAG_TOPDOWN
-	};
+	struct ttm_place place = {0};
 	unsigned long size;
 	int r;
 
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
index 531a2a1..c09da94 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
@@ -1711,16 +1711,14 @@ static int amdgpu_vm_bo_split_mapping(struct amdgpu_device *adev,
 			max_entries = (nodes->size - pfn) *
 				(PAGE_SIZE / AMDGPU_GPU_PAGE_SIZE);
 			switch (mem->mem_type) {
-			case AMDGPU_PL_DGMA_IMPORT:
-				pages_addr = (dma_addr_t *)mem->bus.base;
-				addr += adev->mman.bdev.man[mem->mem_type].gpu_offset -
-					adev->mman.bdev.man[TTM_PL_TT].gpu_offset;
-				gtt_flags = flags;
-				/* fall through */
 			case TTM_PL_TT:
 				max_entries = min(max_entries, 16ull * 1024ull);
 				addr = 0;
 				break;
+			case AMDGPU_PL_DGMA_IMPORT:
+				addr = 0;
+				max_entries = min(max_entries, 16ull * 1024ull);
+				break;
 			case AMDGPU_PL_DGMA:
 				addr += adev->vm_manager.vram_base_offset +
 					adev->mman.bdev.man[mem->mem_type].gpu_offset -
@@ -1797,7 +1795,7 @@ int amdgpu_vm_bo_update(struct amdgpu_device *adev,
 					   struct ttm_dma_tt, ttm);
 			pages_addr = ttm->dma_address;
 		} else if (mem->mem_type == AMDGPU_PL_DGMA_IMPORT) {
-			pages_addr = (dma_addr_t *)bo_va->bo->tbo.mem.bus.base;
+			pages_addr = (dma_addr_t *)bo_va->base.bo->tbo.mem.bus.addr;
 		}
 		exclusive = reservation_object_get_excl(bo->tbo.resv);
 	}
diff --git a/include/uapi/drm/amdgpu_drm.h b/include/uapi/drm/amdgpu_drm.h
index a97ee07..49eb2e1 100644
--- a/include/uapi/drm/amdgpu_drm.h
+++ b/include/uapi/drm/amdgpu_drm.h
@@ -212,10 +212,18 @@ union drm_amdgpu_ctx {
 	union drm_amdgpu_ctx_out out;
 };
 
+/* sem related */
+#define AMDGPU_SEM_OP_CREATE_SEM        1
+#define AMDGPU_SEM_OP_WAIT_SEM          2
+#define AMDGPU_SEM_OP_SIGNAL_SEM        3
+#define AMDGPU_SEM_OP_DESTROY_SEM       4
+#define AMDGPU_SEM_OP_IMPORT_SEM        5
+#define AMDGPU_SEM_OP_EXPORT_SEM        6
+
 struct drm_amdgpu_sem_in {
         /** AMDGPU_SEM_OP_* */
         uint32_t        op;
-        int32_t         fd;
+        int32_t         handle;
         uint32_t        ctx_id;
         uint32_t        ip_type;
         uint32_t        ip_instance;
@@ -225,7 +233,7 @@ struct drm_amdgpu_sem_in {
 
 union drm_amdgpu_sem_out {
         int32_t         fd;
-        uint32_t        _pad;
+        uint32_t        handle;
 };
 
 union drm_amdgpu_sem {
-- 
2.7.4