1*7688df22SAndroid Build Coastguard Worker /*
2*7688df22SAndroid Build Coastguard Worker * Copyright 2014 Advanced Micro Devices, Inc.
3*7688df22SAndroid Build Coastguard Worker *
4*7688df22SAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a
5*7688df22SAndroid Build Coastguard Worker * copy of this software and associated documentation files (the "Software"),
6*7688df22SAndroid Build Coastguard Worker * to deal in the Software without restriction, including without limitation
7*7688df22SAndroid Build Coastguard Worker * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*7688df22SAndroid Build Coastguard Worker * and/or sell copies of the Software, and to permit persons to whom the
9*7688df22SAndroid Build Coastguard Worker * Software is furnished to do so, subject to the following conditions:
10*7688df22SAndroid Build Coastguard Worker *
11*7688df22SAndroid Build Coastguard Worker * The above copyright notice and this permission notice shall be included in
12*7688df22SAndroid Build Coastguard Worker * all copies or substantial portions of the Software.
13*7688df22SAndroid Build Coastguard Worker *
14*7688df22SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15*7688df22SAndroid Build Coastguard Worker * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16*7688df22SAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17*7688df22SAndroid Build Coastguard Worker * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
18*7688df22SAndroid Build Coastguard Worker * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19*7688df22SAndroid Build Coastguard Worker * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20*7688df22SAndroid Build Coastguard Worker * OTHER DEALINGS IN THE SOFTWARE.
21*7688df22SAndroid Build Coastguard Worker *
22*7688df22SAndroid Build Coastguard Worker */
23*7688df22SAndroid Build Coastguard Worker
24*7688df22SAndroid Build Coastguard Worker #include <stdio.h>
25*7688df22SAndroid Build Coastguard Worker
26*7688df22SAndroid Build Coastguard Worker #include "CUnit/Basic.h"
27*7688df22SAndroid Build Coastguard Worker
28*7688df22SAndroid Build Coastguard Worker #include "amdgpu_test.h"
29*7688df22SAndroid Build Coastguard Worker #include "amdgpu_drm.h"
30*7688df22SAndroid Build Coastguard Worker #include "amdgpu_internal.h"
31*7688df22SAndroid Build Coastguard Worker
32*7688df22SAndroid Build Coastguard Worker #define BUFFER_SIZE (4*1024)
33*7688df22SAndroid Build Coastguard Worker #define BUFFER_ALIGN (4*1024)
34*7688df22SAndroid Build Coastguard Worker
35*7688df22SAndroid Build Coastguard Worker static amdgpu_device_handle device_handle;
36*7688df22SAndroid Build Coastguard Worker static uint32_t major_version;
37*7688df22SAndroid Build Coastguard Worker static uint32_t minor_version;
38*7688df22SAndroid Build Coastguard Worker
39*7688df22SAndroid Build Coastguard Worker static amdgpu_bo_handle buffer_handle;
40*7688df22SAndroid Build Coastguard Worker static uint64_t virtual_mc_base_address;
41*7688df22SAndroid Build Coastguard Worker static amdgpu_va_handle va_handle;
42*7688df22SAndroid Build Coastguard Worker
43*7688df22SAndroid Build Coastguard Worker static void amdgpu_bo_export_import(void);
44*7688df22SAndroid Build Coastguard Worker static void amdgpu_bo_metadata(void);
45*7688df22SAndroid Build Coastguard Worker static void amdgpu_bo_map_unmap(void);
46*7688df22SAndroid Build Coastguard Worker static void amdgpu_memory_alloc(void);
47*7688df22SAndroid Build Coastguard Worker static void amdgpu_mem_fail_alloc(void);
48*7688df22SAndroid Build Coastguard Worker static void amdgpu_bo_find_by_cpu_mapping(void);
49*7688df22SAndroid Build Coastguard Worker
50*7688df22SAndroid Build Coastguard Worker CU_TestInfo bo_tests[] = {
51*7688df22SAndroid Build Coastguard Worker { "Export/Import", amdgpu_bo_export_import },
52*7688df22SAndroid Build Coastguard Worker { "Metadata", amdgpu_bo_metadata },
53*7688df22SAndroid Build Coastguard Worker { "CPU map/unmap", amdgpu_bo_map_unmap },
54*7688df22SAndroid Build Coastguard Worker { "Memory alloc Test", amdgpu_memory_alloc },
55*7688df22SAndroid Build Coastguard Worker { "Memory fail alloc Test", amdgpu_mem_fail_alloc },
56*7688df22SAndroid Build Coastguard Worker { "Find bo by CPU mapping", amdgpu_bo_find_by_cpu_mapping },
57*7688df22SAndroid Build Coastguard Worker CU_TEST_INFO_NULL,
58*7688df22SAndroid Build Coastguard Worker };
59*7688df22SAndroid Build Coastguard Worker
suite_bo_tests_init(void)60*7688df22SAndroid Build Coastguard Worker int suite_bo_tests_init(void)
61*7688df22SAndroid Build Coastguard Worker {
62*7688df22SAndroid Build Coastguard Worker struct amdgpu_bo_alloc_request req = {0};
63*7688df22SAndroid Build Coastguard Worker amdgpu_bo_handle buf_handle;
64*7688df22SAndroid Build Coastguard Worker uint64_t va;
65*7688df22SAndroid Build Coastguard Worker int r;
66*7688df22SAndroid Build Coastguard Worker
67*7688df22SAndroid Build Coastguard Worker r = amdgpu_device_initialize(drm_amdgpu[0], &major_version,
68*7688df22SAndroid Build Coastguard Worker &minor_version, &device_handle);
69*7688df22SAndroid Build Coastguard Worker if (r) {
70*7688df22SAndroid Build Coastguard Worker if ((r == -EACCES) && (errno == EACCES))
71*7688df22SAndroid Build Coastguard Worker printf("\n\nError:%s. "
72*7688df22SAndroid Build Coastguard Worker "Hint:Try to run this test program as root.",
73*7688df22SAndroid Build Coastguard Worker strerror(errno));
74*7688df22SAndroid Build Coastguard Worker
75*7688df22SAndroid Build Coastguard Worker return CUE_SINIT_FAILED;
76*7688df22SAndroid Build Coastguard Worker }
77*7688df22SAndroid Build Coastguard Worker
78*7688df22SAndroid Build Coastguard Worker req.alloc_size = BUFFER_SIZE;
79*7688df22SAndroid Build Coastguard Worker req.phys_alignment = BUFFER_ALIGN;
80*7688df22SAndroid Build Coastguard Worker req.preferred_heap = AMDGPU_GEM_DOMAIN_GTT;
81*7688df22SAndroid Build Coastguard Worker
82*7688df22SAndroid Build Coastguard Worker r = amdgpu_bo_alloc(device_handle, &req, &buf_handle);
83*7688df22SAndroid Build Coastguard Worker if (r)
84*7688df22SAndroid Build Coastguard Worker return CUE_SINIT_FAILED;
85*7688df22SAndroid Build Coastguard Worker
86*7688df22SAndroid Build Coastguard Worker r = amdgpu_va_range_alloc(device_handle,
87*7688df22SAndroid Build Coastguard Worker amdgpu_gpu_va_range_general,
88*7688df22SAndroid Build Coastguard Worker BUFFER_SIZE, BUFFER_ALIGN, 0,
89*7688df22SAndroid Build Coastguard Worker &va, &va_handle, 0);
90*7688df22SAndroid Build Coastguard Worker if (r)
91*7688df22SAndroid Build Coastguard Worker goto error_va_alloc;
92*7688df22SAndroid Build Coastguard Worker
93*7688df22SAndroid Build Coastguard Worker r = amdgpu_bo_va_op(buf_handle, 0, BUFFER_SIZE, va, 0, AMDGPU_VA_OP_MAP);
94*7688df22SAndroid Build Coastguard Worker if (r)
95*7688df22SAndroid Build Coastguard Worker goto error_va_map;
96*7688df22SAndroid Build Coastguard Worker
97*7688df22SAndroid Build Coastguard Worker buffer_handle = buf_handle;
98*7688df22SAndroid Build Coastguard Worker virtual_mc_base_address = va;
99*7688df22SAndroid Build Coastguard Worker
100*7688df22SAndroid Build Coastguard Worker return CUE_SUCCESS;
101*7688df22SAndroid Build Coastguard Worker
102*7688df22SAndroid Build Coastguard Worker error_va_map:
103*7688df22SAndroid Build Coastguard Worker amdgpu_va_range_free(va_handle);
104*7688df22SAndroid Build Coastguard Worker
105*7688df22SAndroid Build Coastguard Worker error_va_alloc:
106*7688df22SAndroid Build Coastguard Worker amdgpu_bo_free(buf_handle);
107*7688df22SAndroid Build Coastguard Worker return CUE_SINIT_FAILED;
108*7688df22SAndroid Build Coastguard Worker }
109*7688df22SAndroid Build Coastguard Worker
suite_bo_tests_clean(void)110*7688df22SAndroid Build Coastguard Worker int suite_bo_tests_clean(void)
111*7688df22SAndroid Build Coastguard Worker {
112*7688df22SAndroid Build Coastguard Worker int r;
113*7688df22SAndroid Build Coastguard Worker
114*7688df22SAndroid Build Coastguard Worker r = amdgpu_bo_va_op(buffer_handle, 0, BUFFER_SIZE,
115*7688df22SAndroid Build Coastguard Worker virtual_mc_base_address, 0,
116*7688df22SAndroid Build Coastguard Worker AMDGPU_VA_OP_UNMAP);
117*7688df22SAndroid Build Coastguard Worker if (r)
118*7688df22SAndroid Build Coastguard Worker return CUE_SCLEAN_FAILED;
119*7688df22SAndroid Build Coastguard Worker
120*7688df22SAndroid Build Coastguard Worker r = amdgpu_va_range_free(va_handle);
121*7688df22SAndroid Build Coastguard Worker if (r)
122*7688df22SAndroid Build Coastguard Worker return CUE_SCLEAN_FAILED;
123*7688df22SAndroid Build Coastguard Worker
124*7688df22SAndroid Build Coastguard Worker r = amdgpu_bo_free(buffer_handle);
125*7688df22SAndroid Build Coastguard Worker if (r)
126*7688df22SAndroid Build Coastguard Worker return CUE_SCLEAN_FAILED;
127*7688df22SAndroid Build Coastguard Worker
128*7688df22SAndroid Build Coastguard Worker r = amdgpu_device_deinitialize(device_handle);
129*7688df22SAndroid Build Coastguard Worker if (r)
130*7688df22SAndroid Build Coastguard Worker return CUE_SCLEAN_FAILED;
131*7688df22SAndroid Build Coastguard Worker
132*7688df22SAndroid Build Coastguard Worker return CUE_SUCCESS;
133*7688df22SAndroid Build Coastguard Worker }
134*7688df22SAndroid Build Coastguard Worker
amdgpu_bo_export_import_do_type(enum amdgpu_bo_handle_type type)135*7688df22SAndroid Build Coastguard Worker static void amdgpu_bo_export_import_do_type(enum amdgpu_bo_handle_type type)
136*7688df22SAndroid Build Coastguard Worker {
137*7688df22SAndroid Build Coastguard Worker struct amdgpu_bo_import_result res = {0};
138*7688df22SAndroid Build Coastguard Worker uint32_t shared_handle;
139*7688df22SAndroid Build Coastguard Worker int r;
140*7688df22SAndroid Build Coastguard Worker
141*7688df22SAndroid Build Coastguard Worker r = amdgpu_bo_export(buffer_handle, type, &shared_handle);
142*7688df22SAndroid Build Coastguard Worker CU_ASSERT_EQUAL(r, 0);
143*7688df22SAndroid Build Coastguard Worker
144*7688df22SAndroid Build Coastguard Worker r = amdgpu_bo_import(device_handle, type, shared_handle, &res);
145*7688df22SAndroid Build Coastguard Worker CU_ASSERT_EQUAL(r, 0);
146*7688df22SAndroid Build Coastguard Worker
147*7688df22SAndroid Build Coastguard Worker CU_ASSERT_EQUAL(res.buf_handle, buffer_handle);
148*7688df22SAndroid Build Coastguard Worker CU_ASSERT_EQUAL(res.alloc_size, BUFFER_SIZE);
149*7688df22SAndroid Build Coastguard Worker
150*7688df22SAndroid Build Coastguard Worker r = amdgpu_bo_free(res.buf_handle);
151*7688df22SAndroid Build Coastguard Worker CU_ASSERT_EQUAL(r, 0);
152*7688df22SAndroid Build Coastguard Worker }
153*7688df22SAndroid Build Coastguard Worker
amdgpu_bo_export_import(void)154*7688df22SAndroid Build Coastguard Worker static void amdgpu_bo_export_import(void)
155*7688df22SAndroid Build Coastguard Worker {
156*7688df22SAndroid Build Coastguard Worker if (open_render_node) {
157*7688df22SAndroid Build Coastguard Worker printf("(DRM render node is used. Skip export/Import test) ");
158*7688df22SAndroid Build Coastguard Worker return;
159*7688df22SAndroid Build Coastguard Worker }
160*7688df22SAndroid Build Coastguard Worker
161*7688df22SAndroid Build Coastguard Worker amdgpu_bo_export_import_do_type(amdgpu_bo_handle_type_gem_flink_name);
162*7688df22SAndroid Build Coastguard Worker amdgpu_bo_export_import_do_type(amdgpu_bo_handle_type_dma_buf_fd);
163*7688df22SAndroid Build Coastguard Worker }
164*7688df22SAndroid Build Coastguard Worker
amdgpu_bo_metadata(void)165*7688df22SAndroid Build Coastguard Worker static void amdgpu_bo_metadata(void)
166*7688df22SAndroid Build Coastguard Worker {
167*7688df22SAndroid Build Coastguard Worker struct amdgpu_bo_metadata meta = {0};
168*7688df22SAndroid Build Coastguard Worker struct amdgpu_bo_info info = {0};
169*7688df22SAndroid Build Coastguard Worker int r;
170*7688df22SAndroid Build Coastguard Worker
171*7688df22SAndroid Build Coastguard Worker meta.size_metadata = 4;
172*7688df22SAndroid Build Coastguard Worker meta.umd_metadata[0] = 0xdeadbeef;
173*7688df22SAndroid Build Coastguard Worker
174*7688df22SAndroid Build Coastguard Worker r = amdgpu_bo_set_metadata(buffer_handle, &meta);
175*7688df22SAndroid Build Coastguard Worker CU_ASSERT_EQUAL(r, 0);
176*7688df22SAndroid Build Coastguard Worker
177*7688df22SAndroid Build Coastguard Worker r = amdgpu_bo_query_info(buffer_handle, &info);
178*7688df22SAndroid Build Coastguard Worker CU_ASSERT_EQUAL(r, 0);
179*7688df22SAndroid Build Coastguard Worker
180*7688df22SAndroid Build Coastguard Worker CU_ASSERT_EQUAL(info.metadata.size_metadata, 4);
181*7688df22SAndroid Build Coastguard Worker CU_ASSERT_EQUAL(info.metadata.umd_metadata[0], 0xdeadbeef);
182*7688df22SAndroid Build Coastguard Worker }
183*7688df22SAndroid Build Coastguard Worker
amdgpu_bo_map_unmap(void)184*7688df22SAndroid Build Coastguard Worker static void amdgpu_bo_map_unmap(void)
185*7688df22SAndroid Build Coastguard Worker {
186*7688df22SAndroid Build Coastguard Worker uint32_t *ptr;
187*7688df22SAndroid Build Coastguard Worker int i, r;
188*7688df22SAndroid Build Coastguard Worker
189*7688df22SAndroid Build Coastguard Worker r = amdgpu_bo_cpu_map(buffer_handle, (void **)&ptr);
190*7688df22SAndroid Build Coastguard Worker CU_ASSERT_EQUAL(r, 0);
191*7688df22SAndroid Build Coastguard Worker CU_ASSERT_NOT_EQUAL(ptr, NULL);
192*7688df22SAndroid Build Coastguard Worker
193*7688df22SAndroid Build Coastguard Worker for (i = 0; i < (BUFFER_SIZE / 4); ++i)
194*7688df22SAndroid Build Coastguard Worker ptr[i] = 0xdeadbeef;
195*7688df22SAndroid Build Coastguard Worker
196*7688df22SAndroid Build Coastguard Worker r = amdgpu_bo_cpu_unmap(buffer_handle);
197*7688df22SAndroid Build Coastguard Worker CU_ASSERT_EQUAL(r, 0);
198*7688df22SAndroid Build Coastguard Worker }
199*7688df22SAndroid Build Coastguard Worker
amdgpu_memory_alloc(void)200*7688df22SAndroid Build Coastguard Worker static void amdgpu_memory_alloc(void)
201*7688df22SAndroid Build Coastguard Worker {
202*7688df22SAndroid Build Coastguard Worker amdgpu_bo_handle bo;
203*7688df22SAndroid Build Coastguard Worker amdgpu_va_handle va_handle;
204*7688df22SAndroid Build Coastguard Worker uint64_t bo_mc;
205*7688df22SAndroid Build Coastguard Worker int r;
206*7688df22SAndroid Build Coastguard Worker
207*7688df22SAndroid Build Coastguard Worker /* Test visible VRAM */
208*7688df22SAndroid Build Coastguard Worker bo = gpu_mem_alloc(device_handle,
209*7688df22SAndroid Build Coastguard Worker 4096, 4096,
210*7688df22SAndroid Build Coastguard Worker AMDGPU_GEM_DOMAIN_VRAM,
211*7688df22SAndroid Build Coastguard Worker AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED,
212*7688df22SAndroid Build Coastguard Worker &bo_mc, &va_handle);
213*7688df22SAndroid Build Coastguard Worker
214*7688df22SAndroid Build Coastguard Worker r = gpu_mem_free(bo, va_handle, bo_mc, 4096);
215*7688df22SAndroid Build Coastguard Worker CU_ASSERT_EQUAL(r, 0);
216*7688df22SAndroid Build Coastguard Worker
217*7688df22SAndroid Build Coastguard Worker /* Test invisible VRAM */
218*7688df22SAndroid Build Coastguard Worker bo = gpu_mem_alloc(device_handle,
219*7688df22SAndroid Build Coastguard Worker 4096, 4096,
220*7688df22SAndroid Build Coastguard Worker AMDGPU_GEM_DOMAIN_VRAM,
221*7688df22SAndroid Build Coastguard Worker AMDGPU_GEM_CREATE_NO_CPU_ACCESS,
222*7688df22SAndroid Build Coastguard Worker &bo_mc, &va_handle);
223*7688df22SAndroid Build Coastguard Worker
224*7688df22SAndroid Build Coastguard Worker r = gpu_mem_free(bo, va_handle, bo_mc, 4096);
225*7688df22SAndroid Build Coastguard Worker CU_ASSERT_EQUAL(r, 0);
226*7688df22SAndroid Build Coastguard Worker
227*7688df22SAndroid Build Coastguard Worker /* Test GART Cacheable */
228*7688df22SAndroid Build Coastguard Worker bo = gpu_mem_alloc(device_handle,
229*7688df22SAndroid Build Coastguard Worker 4096, 4096,
230*7688df22SAndroid Build Coastguard Worker AMDGPU_GEM_DOMAIN_GTT,
231*7688df22SAndroid Build Coastguard Worker 0, &bo_mc, &va_handle);
232*7688df22SAndroid Build Coastguard Worker
233*7688df22SAndroid Build Coastguard Worker r = gpu_mem_free(bo, va_handle, bo_mc, 4096);
234*7688df22SAndroid Build Coastguard Worker CU_ASSERT_EQUAL(r, 0);
235*7688df22SAndroid Build Coastguard Worker
236*7688df22SAndroid Build Coastguard Worker /* Test GART USWC */
237*7688df22SAndroid Build Coastguard Worker bo = gpu_mem_alloc(device_handle,
238*7688df22SAndroid Build Coastguard Worker 4096, 4096,
239*7688df22SAndroid Build Coastguard Worker AMDGPU_GEM_DOMAIN_GTT,
240*7688df22SAndroid Build Coastguard Worker AMDGPU_GEM_CREATE_CPU_GTT_USWC,
241*7688df22SAndroid Build Coastguard Worker &bo_mc, &va_handle);
242*7688df22SAndroid Build Coastguard Worker
243*7688df22SAndroid Build Coastguard Worker r = gpu_mem_free(bo, va_handle, bo_mc, 4096);
244*7688df22SAndroid Build Coastguard Worker CU_ASSERT_EQUAL(r, 0);
245*7688df22SAndroid Build Coastguard Worker
246*7688df22SAndroid Build Coastguard Worker /* Test GDS */
247*7688df22SAndroid Build Coastguard Worker bo = gpu_mem_alloc(device_handle, 1024, 0,
248*7688df22SAndroid Build Coastguard Worker AMDGPU_GEM_DOMAIN_GDS, 0,
249*7688df22SAndroid Build Coastguard Worker NULL, NULL);
250*7688df22SAndroid Build Coastguard Worker r = gpu_mem_free(bo, NULL, 0, 4096);
251*7688df22SAndroid Build Coastguard Worker CU_ASSERT_EQUAL(r, 0);
252*7688df22SAndroid Build Coastguard Worker
253*7688df22SAndroid Build Coastguard Worker /* Test GWS */
254*7688df22SAndroid Build Coastguard Worker bo = gpu_mem_alloc(device_handle, 1, 0,
255*7688df22SAndroid Build Coastguard Worker AMDGPU_GEM_DOMAIN_GWS, 0,
256*7688df22SAndroid Build Coastguard Worker NULL, NULL);
257*7688df22SAndroid Build Coastguard Worker r = gpu_mem_free(bo, NULL, 0, 4096);
258*7688df22SAndroid Build Coastguard Worker CU_ASSERT_EQUAL(r, 0);
259*7688df22SAndroid Build Coastguard Worker
260*7688df22SAndroid Build Coastguard Worker /* Test OA */
261*7688df22SAndroid Build Coastguard Worker bo = gpu_mem_alloc(device_handle, 1, 0,
262*7688df22SAndroid Build Coastguard Worker AMDGPU_GEM_DOMAIN_OA, 0,
263*7688df22SAndroid Build Coastguard Worker NULL, NULL);
264*7688df22SAndroid Build Coastguard Worker r = gpu_mem_free(bo, NULL, 0, 4096);
265*7688df22SAndroid Build Coastguard Worker CU_ASSERT_EQUAL(r, 0);
266*7688df22SAndroid Build Coastguard Worker }
267*7688df22SAndroid Build Coastguard Worker
amdgpu_mem_fail_alloc(void)268*7688df22SAndroid Build Coastguard Worker static void amdgpu_mem_fail_alloc(void)
269*7688df22SAndroid Build Coastguard Worker {
270*7688df22SAndroid Build Coastguard Worker int r;
271*7688df22SAndroid Build Coastguard Worker struct amdgpu_bo_alloc_request req = {0};
272*7688df22SAndroid Build Coastguard Worker amdgpu_bo_handle buf_handle;
273*7688df22SAndroid Build Coastguard Worker
274*7688df22SAndroid Build Coastguard Worker /* Test impossible mem allocation, 1TB */
275*7688df22SAndroid Build Coastguard Worker req.alloc_size = 0xE8D4A51000;
276*7688df22SAndroid Build Coastguard Worker req.phys_alignment = 4096;
277*7688df22SAndroid Build Coastguard Worker req.preferred_heap = AMDGPU_GEM_DOMAIN_VRAM;
278*7688df22SAndroid Build Coastguard Worker req.flags = AMDGPU_GEM_CREATE_NO_CPU_ACCESS;
279*7688df22SAndroid Build Coastguard Worker
280*7688df22SAndroid Build Coastguard Worker r = amdgpu_bo_alloc(device_handle, &req, &buf_handle);
281*7688df22SAndroid Build Coastguard Worker CU_ASSERT_EQUAL(r, -ENOMEM);
282*7688df22SAndroid Build Coastguard Worker
283*7688df22SAndroid Build Coastguard Worker if (!r) {
284*7688df22SAndroid Build Coastguard Worker r = amdgpu_bo_free(buf_handle);
285*7688df22SAndroid Build Coastguard Worker CU_ASSERT_EQUAL(r, 0);
286*7688df22SAndroid Build Coastguard Worker }
287*7688df22SAndroid Build Coastguard Worker }
288*7688df22SAndroid Build Coastguard Worker
amdgpu_bo_find_by_cpu_mapping(void)289*7688df22SAndroid Build Coastguard Worker static void amdgpu_bo_find_by_cpu_mapping(void)
290*7688df22SAndroid Build Coastguard Worker {
291*7688df22SAndroid Build Coastguard Worker amdgpu_bo_handle bo_handle, find_bo_handle;
292*7688df22SAndroid Build Coastguard Worker amdgpu_va_handle va_handle;
293*7688df22SAndroid Build Coastguard Worker void *bo_cpu;
294*7688df22SAndroid Build Coastguard Worker uint64_t bo_mc_address;
295*7688df22SAndroid Build Coastguard Worker uint64_t offset;
296*7688df22SAndroid Build Coastguard Worker int r;
297*7688df22SAndroid Build Coastguard Worker
298*7688df22SAndroid Build Coastguard Worker r = amdgpu_bo_alloc_and_map(device_handle, 4096, 4096,
299*7688df22SAndroid Build Coastguard Worker AMDGPU_GEM_DOMAIN_GTT, 0,
300*7688df22SAndroid Build Coastguard Worker &bo_handle, &bo_cpu,
301*7688df22SAndroid Build Coastguard Worker &bo_mc_address, &va_handle);
302*7688df22SAndroid Build Coastguard Worker CU_ASSERT_EQUAL(r, 0);
303*7688df22SAndroid Build Coastguard Worker
304*7688df22SAndroid Build Coastguard Worker r = amdgpu_find_bo_by_cpu_mapping(device_handle,
305*7688df22SAndroid Build Coastguard Worker bo_cpu,
306*7688df22SAndroid Build Coastguard Worker 4096,
307*7688df22SAndroid Build Coastguard Worker &find_bo_handle,
308*7688df22SAndroid Build Coastguard Worker &offset);
309*7688df22SAndroid Build Coastguard Worker CU_ASSERT_EQUAL(r, 0);
310*7688df22SAndroid Build Coastguard Worker CU_ASSERT_EQUAL(offset, 0);
311*7688df22SAndroid Build Coastguard Worker CU_ASSERT_EQUAL(bo_handle->handle, find_bo_handle->handle);
312*7688df22SAndroid Build Coastguard Worker
313*7688df22SAndroid Build Coastguard Worker atomic_dec(&find_bo_handle->refcount, 1);
314*7688df22SAndroid Build Coastguard Worker r = amdgpu_bo_unmap_and_free(bo_handle, va_handle,
315*7688df22SAndroid Build Coastguard Worker bo_mc_address, 4096);
316*7688df22SAndroid Build Coastguard Worker CU_ASSERT_EQUAL(r, 0);
317*7688df22SAndroid Build Coastguard Worker }
318