xref: /aosp_15_r20/external/libdrm/tests/amdgpu/cp_dma_tests.c (revision 7688df22e49036ff52a766b7101da3a49edadb8c)
1*7688df22SAndroid Build Coastguard Worker /*
2*7688df22SAndroid Build Coastguard Worker  * Copyright 2022 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 <unistd.h>
25*7688df22SAndroid Build Coastguard Worker #include <stdio.h>
26*7688df22SAndroid Build Coastguard Worker #include <stdlib.h>
27*7688df22SAndroid Build Coastguard Worker #include <inttypes.h>
28*7688df22SAndroid Build Coastguard Worker 
29*7688df22SAndroid Build Coastguard Worker #include "CUnit/Basic.h"
30*7688df22SAndroid Build Coastguard Worker 
31*7688df22SAndroid Build Coastguard Worker #include "amdgpu_test.h"
32*7688df22SAndroid Build Coastguard Worker #include "amdgpu_drm.h"
33*7688df22SAndroid Build Coastguard Worker #include "amdgpu_internal.h"
34*7688df22SAndroid Build Coastguard Worker 
35*7688df22SAndroid Build Coastguard Worker #define IB_SIZE 4096
36*7688df22SAndroid Build Coastguard Worker #define MAX_RESOURCES 8
37*7688df22SAndroid Build Coastguard Worker 
38*7688df22SAndroid Build Coastguard Worker #define DMA_SIZE 4097
39*7688df22SAndroid Build Coastguard Worker #define DMA_DATA_BYTE 0xea
40*7688df22SAndroid Build Coastguard Worker 
41*7688df22SAndroid Build Coastguard Worker static bool do_p2p;
42*7688df22SAndroid Build Coastguard Worker 
43*7688df22SAndroid Build Coastguard Worker static amdgpu_device_handle executing_device_handle;
44*7688df22SAndroid Build Coastguard Worker static uint32_t executing_device_major_version;
45*7688df22SAndroid Build Coastguard Worker static uint32_t executing_device_minor_version;
46*7688df22SAndroid Build Coastguard Worker 
47*7688df22SAndroid Build Coastguard Worker static amdgpu_device_handle peer_exporting_device_handle;
48*7688df22SAndroid Build Coastguard Worker static uint32_t peer_exporting_device_major_version;
49*7688df22SAndroid Build Coastguard Worker static uint32_t peer_exporting_device_minor_version;
50*7688df22SAndroid Build Coastguard Worker 
51*7688df22SAndroid Build Coastguard Worker static amdgpu_context_handle context_handle;
52*7688df22SAndroid Build Coastguard Worker static amdgpu_bo_handle ib_handle;
53*7688df22SAndroid Build Coastguard Worker static uint32_t *ib_cpu;
54*7688df22SAndroid Build Coastguard Worker static uint64_t ib_mc_address;
55*7688df22SAndroid Build Coastguard Worker static amdgpu_va_handle ib_va_handle;
56*7688df22SAndroid Build Coastguard Worker static uint32_t num_dword;
57*7688df22SAndroid Build Coastguard Worker 
58*7688df22SAndroid Build Coastguard Worker static amdgpu_bo_handle resources[MAX_RESOURCES];
59*7688df22SAndroid Build Coastguard Worker static unsigned num_resources;
60*7688df22SAndroid Build Coastguard Worker 
61*7688df22SAndroid Build Coastguard Worker static uint8_t* reference_data;
62*7688df22SAndroid Build Coastguard Worker 
63*7688df22SAndroid Build Coastguard Worker static void amdgpu_cp_dma_host_to_vram(void);
64*7688df22SAndroid Build Coastguard Worker static void amdgpu_cp_dma_vram_to_host(void);
65*7688df22SAndroid Build Coastguard Worker static void amdgpu_cp_dma_p2p_vram_to_vram(void);
66*7688df22SAndroid Build Coastguard Worker static void amdgpu_cp_dma_p2p_host_to_vram(void);
67*7688df22SAndroid Build Coastguard Worker static void amdgpu_cp_dma_p2p_vram_to_host(void);
68*7688df22SAndroid Build Coastguard Worker 
69*7688df22SAndroid Build Coastguard Worker /**
70*7688df22SAndroid Build Coastguard Worker  * Tests in cp dma test suite
71*7688df22SAndroid Build Coastguard Worker  */
72*7688df22SAndroid Build Coastguard Worker CU_TestInfo cp_dma_tests[] = {
73*7688df22SAndroid Build Coastguard Worker 	{ "CP DMA write Host to VRAM",  amdgpu_cp_dma_host_to_vram },
74*7688df22SAndroid Build Coastguard Worker 	{ "CP DMA write VRAM to Host",  amdgpu_cp_dma_vram_to_host },
75*7688df22SAndroid Build Coastguard Worker 
76*7688df22SAndroid Build Coastguard Worker 	{ "Peer to Peer CP DMA write VRAM to VRAM",  amdgpu_cp_dma_p2p_vram_to_vram },
77*7688df22SAndroid Build Coastguard Worker 	{ "Peer to Peer CP DMA write Host to VRAM",  amdgpu_cp_dma_p2p_host_to_vram },
78*7688df22SAndroid Build Coastguard Worker 	{ "Peer to Peer CP DMA write VRAM to Host",  amdgpu_cp_dma_p2p_vram_to_host },
79*7688df22SAndroid Build Coastguard Worker 	CU_TEST_INFO_NULL,
80*7688df22SAndroid Build Coastguard Worker };
81*7688df22SAndroid Build Coastguard Worker 
82*7688df22SAndroid Build Coastguard Worker struct amdgpu_cp_dma_bo{
83*7688df22SAndroid Build Coastguard Worker 	amdgpu_bo_handle buf_handle;
84*7688df22SAndroid Build Coastguard Worker 	amdgpu_va_handle va_handle;
85*7688df22SAndroid Build Coastguard Worker 	uint64_t gpu_va;
86*7688df22SAndroid Build Coastguard Worker 	uint64_t size;
87*7688df22SAndroid Build Coastguard Worker };
88*7688df22SAndroid Build Coastguard Worker 
allocate_bo_and_va(amdgpu_device_handle dev,uint64_t size,uint64_t alignment,uint32_t heap,uint64_t alloc_flags,struct amdgpu_cp_dma_bo * bo)89*7688df22SAndroid Build Coastguard Worker static int allocate_bo_and_va(amdgpu_device_handle dev,
90*7688df22SAndroid Build Coastguard Worker 		uint64_t size, uint64_t alignment,
91*7688df22SAndroid Build Coastguard Worker 		uint32_t heap, uint64_t alloc_flags,
92*7688df22SAndroid Build Coastguard Worker 		struct amdgpu_cp_dma_bo *bo) {
93*7688df22SAndroid Build Coastguard Worker 	struct amdgpu_bo_alloc_request request = {};
94*7688df22SAndroid Build Coastguard Worker 	amdgpu_bo_handle buf_handle;
95*7688df22SAndroid Build Coastguard Worker 	amdgpu_va_handle va_handle;
96*7688df22SAndroid Build Coastguard Worker 	uint64_t vmc_addr;
97*7688df22SAndroid Build Coastguard Worker 	int r;
98*7688df22SAndroid Build Coastguard Worker 
99*7688df22SAndroid Build Coastguard Worker 	request.alloc_size = size;
100*7688df22SAndroid Build Coastguard Worker 	request.phys_alignment = alignment;
101*7688df22SAndroid Build Coastguard Worker 	request.preferred_heap = heap;
102*7688df22SAndroid Build Coastguard Worker 	request.flags = alloc_flags;
103*7688df22SAndroid Build Coastguard Worker 
104*7688df22SAndroid Build Coastguard Worker 	r = amdgpu_bo_alloc(dev, &request, &buf_handle);
105*7688df22SAndroid Build Coastguard Worker 	if (r)
106*7688df22SAndroid Build Coastguard Worker 		goto error_bo_alloc;
107*7688df22SAndroid Build Coastguard Worker 
108*7688df22SAndroid Build Coastguard Worker 	r = amdgpu_va_range_alloc(dev, amdgpu_gpu_va_range_general,
109*7688df22SAndroid Build Coastguard Worker 			size, alignment, 0,
110*7688df22SAndroid Build Coastguard Worker 			&vmc_addr, &va_handle, 0);
111*7688df22SAndroid Build Coastguard Worker 	if (r)
112*7688df22SAndroid Build Coastguard Worker 		goto error_va_alloc;
113*7688df22SAndroid Build Coastguard Worker 
114*7688df22SAndroid Build Coastguard Worker 	r = amdgpu_bo_va_op(buf_handle, 0, size, vmc_addr,
115*7688df22SAndroid Build Coastguard Worker 						AMDGPU_VM_PAGE_READABLE |
116*7688df22SAndroid Build Coastguard Worker 							AMDGPU_VM_PAGE_WRITEABLE |
117*7688df22SAndroid Build Coastguard Worker 							AMDGPU_VM_PAGE_EXECUTABLE,
118*7688df22SAndroid Build Coastguard Worker 						AMDGPU_VA_OP_MAP);
119*7688df22SAndroid Build Coastguard Worker 	if (r)
120*7688df22SAndroid Build Coastguard Worker 		goto error_va_map;
121*7688df22SAndroid Build Coastguard Worker 
122*7688df22SAndroid Build Coastguard Worker 	bo->buf_handle = buf_handle;
123*7688df22SAndroid Build Coastguard Worker 	bo->va_handle = va_handle;
124*7688df22SAndroid Build Coastguard Worker 	bo->gpu_va = vmc_addr;
125*7688df22SAndroid Build Coastguard Worker 	bo->size = size;
126*7688df22SAndroid Build Coastguard Worker 
127*7688df22SAndroid Build Coastguard Worker 	return 0;
128*7688df22SAndroid Build Coastguard Worker 
129*7688df22SAndroid Build Coastguard Worker error_va_map:
130*7688df22SAndroid Build Coastguard Worker 	amdgpu_bo_va_op(buf_handle, 0,
131*7688df22SAndroid Build Coastguard Worker 			size, vmc_addr, 0, AMDGPU_VA_OP_UNMAP);
132*7688df22SAndroid Build Coastguard Worker 
133*7688df22SAndroid Build Coastguard Worker error_va_alloc:
134*7688df22SAndroid Build Coastguard Worker 	amdgpu_va_range_free(va_handle);
135*7688df22SAndroid Build Coastguard Worker 
136*7688df22SAndroid Build Coastguard Worker error_bo_alloc:
137*7688df22SAndroid Build Coastguard Worker 	amdgpu_bo_free(buf_handle);
138*7688df22SAndroid Build Coastguard Worker 
139*7688df22SAndroid Build Coastguard Worker 	return r;
140*7688df22SAndroid Build Coastguard Worker }
141*7688df22SAndroid Build Coastguard Worker 
import_dma_buf_to_bo(amdgpu_device_handle dev,int dmabuf_fd,struct amdgpu_cp_dma_bo * bo)142*7688df22SAndroid Build Coastguard Worker static int import_dma_buf_to_bo(amdgpu_device_handle dev,
143*7688df22SAndroid Build Coastguard Worker 		int dmabuf_fd, struct amdgpu_cp_dma_bo *bo) {
144*7688df22SAndroid Build Coastguard Worker 	amdgpu_va_handle va_handle;
145*7688df22SAndroid Build Coastguard Worker 	uint64_t vmc_addr;
146*7688df22SAndroid Build Coastguard Worker 	int r;
147*7688df22SAndroid Build Coastguard Worker 	struct amdgpu_bo_import_result bo_import_result = {};
148*7688df22SAndroid Build Coastguard Worker 
149*7688df22SAndroid Build Coastguard Worker 	r = amdgpu_bo_import(dev, amdgpu_bo_handle_type_dma_buf_fd,
150*7688df22SAndroid Build Coastguard Worker 			dmabuf_fd, &bo_import_result);
151*7688df22SAndroid Build Coastguard Worker 	if (r)
152*7688df22SAndroid Build Coastguard Worker 		goto error_bo_import;
153*7688df22SAndroid Build Coastguard Worker 
154*7688df22SAndroid Build Coastguard Worker 	r = amdgpu_va_range_alloc(dev, amdgpu_gpu_va_range_general,
155*7688df22SAndroid Build Coastguard Worker 				bo_import_result.alloc_size, 0, 0,
156*7688df22SAndroid Build Coastguard Worker 				&vmc_addr, &va_handle, 0);
157*7688df22SAndroid Build Coastguard Worker 	if (r)
158*7688df22SAndroid Build Coastguard Worker 		goto error_va_alloc;
159*7688df22SAndroid Build Coastguard Worker 
160*7688df22SAndroid Build Coastguard Worker 	r = amdgpu_bo_va_op(bo_import_result.buf_handle, 0,
161*7688df22SAndroid Build Coastguard Worker 			bo_import_result.alloc_size, vmc_addr,
162*7688df22SAndroid Build Coastguard Worker 			AMDGPU_VM_PAGE_READABLE |
163*7688df22SAndroid Build Coastguard Worker 				AMDGPU_VM_PAGE_WRITEABLE |
164*7688df22SAndroid Build Coastguard Worker 				AMDGPU_VM_PAGE_EXECUTABLE,
165*7688df22SAndroid Build Coastguard Worker 			AMDGPU_VA_OP_MAP);
166*7688df22SAndroid Build Coastguard Worker 	if (r)
167*7688df22SAndroid Build Coastguard Worker 		goto error_va_map;
168*7688df22SAndroid Build Coastguard Worker 
169*7688df22SAndroid Build Coastguard Worker 	bo->buf_handle = bo_import_result.buf_handle;
170*7688df22SAndroid Build Coastguard Worker 	bo->va_handle = va_handle;
171*7688df22SAndroid Build Coastguard Worker 	bo->gpu_va = vmc_addr;
172*7688df22SAndroid Build Coastguard Worker 	bo->size = bo_import_result.alloc_size;
173*7688df22SAndroid Build Coastguard Worker 
174*7688df22SAndroid Build Coastguard Worker 	return 0;
175*7688df22SAndroid Build Coastguard Worker 
176*7688df22SAndroid Build Coastguard Worker error_va_map:
177*7688df22SAndroid Build Coastguard Worker 	amdgpu_bo_va_op(bo_import_result.buf_handle, 0,
178*7688df22SAndroid Build Coastguard Worker 			bo_import_result.alloc_size, vmc_addr, 0, AMDGPU_VA_OP_UNMAP);
179*7688df22SAndroid Build Coastguard Worker 
180*7688df22SAndroid Build Coastguard Worker error_va_alloc:
181*7688df22SAndroid Build Coastguard Worker 	amdgpu_va_range_free(va_handle);
182*7688df22SAndroid Build Coastguard Worker 
183*7688df22SAndroid Build Coastguard Worker error_bo_import:
184*7688df22SAndroid Build Coastguard Worker 	amdgpu_bo_free(bo_import_result.buf_handle);
185*7688df22SAndroid Build Coastguard Worker 
186*7688df22SAndroid Build Coastguard Worker 	return r;
187*7688df22SAndroid Build Coastguard Worker }
188*7688df22SAndroid Build Coastguard Worker 
free_bo(struct amdgpu_cp_dma_bo bo)189*7688df22SAndroid Build Coastguard Worker static int free_bo(struct amdgpu_cp_dma_bo bo) {
190*7688df22SAndroid Build Coastguard Worker 	int r;
191*7688df22SAndroid Build Coastguard Worker 	r = amdgpu_bo_va_op(bo.buf_handle, 0,
192*7688df22SAndroid Build Coastguard Worker 			bo.size, bo.gpu_va, 0, AMDGPU_VA_OP_UNMAP);
193*7688df22SAndroid Build Coastguard Worker 	if(r)
194*7688df22SAndroid Build Coastguard Worker 		return r;
195*7688df22SAndroid Build Coastguard Worker 
196*7688df22SAndroid Build Coastguard Worker 	r = amdgpu_va_range_free(bo.va_handle);
197*7688df22SAndroid Build Coastguard Worker 	if(r)
198*7688df22SAndroid Build Coastguard Worker 		return r;
199*7688df22SAndroid Build Coastguard Worker 
200*7688df22SAndroid Build Coastguard Worker 	r = amdgpu_bo_free(bo.buf_handle);
201*7688df22SAndroid Build Coastguard Worker 	if(r)
202*7688df22SAndroid Build Coastguard Worker 		return r;
203*7688df22SAndroid Build Coastguard Worker 
204*7688df22SAndroid Build Coastguard Worker 	return 0;
205*7688df22SAndroid Build Coastguard Worker }
206*7688df22SAndroid Build Coastguard Worker 
submit_and_sync()207*7688df22SAndroid Build Coastguard Worker static int submit_and_sync() {
208*7688df22SAndroid Build Coastguard Worker 	struct amdgpu_cs_request ibs_request = {0};
209*7688df22SAndroid Build Coastguard Worker 	struct amdgpu_cs_ib_info ib_info = {0};
210*7688df22SAndroid Build Coastguard Worker 	struct amdgpu_cs_fence fence_status = {0};
211*7688df22SAndroid Build Coastguard Worker 	uint32_t expired;
212*7688df22SAndroid Build Coastguard Worker 	uint32_t family_id, chip_id, chip_rev;
213*7688df22SAndroid Build Coastguard Worker 	unsigned gc_ip_type;
214*7688df22SAndroid Build Coastguard Worker 	int r;
215*7688df22SAndroid Build Coastguard Worker 
216*7688df22SAndroid Build Coastguard Worker 	r = amdgpu_bo_list_create(executing_device_handle,
217*7688df22SAndroid Build Coastguard Worker 			num_resources, resources,
218*7688df22SAndroid Build Coastguard Worker 			NULL, &ibs_request.resources);
219*7688df22SAndroid Build Coastguard Worker 	if (r)
220*7688df22SAndroid Build Coastguard Worker 		return r;
221*7688df22SAndroid Build Coastguard Worker 
222*7688df22SAndroid Build Coastguard Worker 	family_id = executing_device_handle->info.family_id;
223*7688df22SAndroid Build Coastguard Worker 	chip_id = executing_device_handle->info.chip_external_rev;
224*7688df22SAndroid Build Coastguard Worker 	chip_rev = executing_device_handle->info.chip_rev;
225*7688df22SAndroid Build Coastguard Worker 
226*7688df22SAndroid Build Coastguard Worker 	gc_ip_type = (asic_is_gfx_pipe_removed(family_id, chip_id, chip_rev)) ?
227*7688df22SAndroid Build Coastguard Worker 		AMDGPU_HW_IP_COMPUTE : AMDGPU_HW_IP_GFX;
228*7688df22SAndroid Build Coastguard Worker 
229*7688df22SAndroid Build Coastguard Worker 	ib_info.ib_mc_address = ib_mc_address;
230*7688df22SAndroid Build Coastguard Worker 	ib_info.size = num_dword;
231*7688df22SAndroid Build Coastguard Worker 
232*7688df22SAndroid Build Coastguard Worker 	ibs_request.ip_type = gc_ip_type;
233*7688df22SAndroid Build Coastguard Worker 	ibs_request.number_of_ibs = 1;
234*7688df22SAndroid Build Coastguard Worker 	ibs_request.ibs = &ib_info;
235*7688df22SAndroid Build Coastguard Worker 	ibs_request.fence_info.handle = NULL;
236*7688df22SAndroid Build Coastguard Worker 
237*7688df22SAndroid Build Coastguard Worker 	r = amdgpu_cs_submit(context_handle, 0, &ibs_request, 1);
238*7688df22SAndroid Build Coastguard Worker 	if (r)
239*7688df22SAndroid Build Coastguard Worker 		return r;
240*7688df22SAndroid Build Coastguard Worker 
241*7688df22SAndroid Build Coastguard Worker 	r = amdgpu_bo_list_destroy(ibs_request.resources);
242*7688df22SAndroid Build Coastguard Worker 	if (r)
243*7688df22SAndroid Build Coastguard Worker 		return r;
244*7688df22SAndroid Build Coastguard Worker 
245*7688df22SAndroid Build Coastguard Worker 	fence_status.context = context_handle;
246*7688df22SAndroid Build Coastguard Worker 	fence_status.ip_type = gc_ip_type;
247*7688df22SAndroid Build Coastguard Worker 	fence_status.fence = ibs_request.seq_no;
248*7688df22SAndroid Build Coastguard Worker 
249*7688df22SAndroid Build Coastguard Worker 	r = amdgpu_cs_query_fence_status(&fence_status,
250*7688df22SAndroid Build Coastguard Worker 			AMDGPU_TIMEOUT_INFINITE,
251*7688df22SAndroid Build Coastguard Worker 			0, &expired);
252*7688df22SAndroid Build Coastguard Worker 	if (r)
253*7688df22SAndroid Build Coastguard Worker 		return r;
254*7688df22SAndroid Build Coastguard Worker 
255*7688df22SAndroid Build Coastguard Worker 	return 0;
256*7688df22SAndroid Build Coastguard Worker }
257*7688df22SAndroid Build Coastguard Worker 
cp_dma_cmd(struct amdgpu_cp_dma_bo src_bo,struct amdgpu_cp_dma_bo dst_bo)258*7688df22SAndroid Build Coastguard Worker static void cp_dma_cmd(struct amdgpu_cp_dma_bo src_bo,
259*7688df22SAndroid Build Coastguard Worker 		struct amdgpu_cp_dma_bo dst_bo) {
260*7688df22SAndroid Build Coastguard Worker 	_Static_assert(DMA_SIZE < (1 << 26), "DMA size exceeds CP DMA maximium!");
261*7688df22SAndroid Build Coastguard Worker 
262*7688df22SAndroid Build Coastguard Worker 	ib_cpu[0] = 0xc0055000;
263*7688df22SAndroid Build Coastguard Worker 	ib_cpu[1] = 0x80000000;
264*7688df22SAndroid Build Coastguard Worker 	ib_cpu[2] = src_bo.gpu_va & 0x00000000ffffffff;
265*7688df22SAndroid Build Coastguard Worker 	ib_cpu[3] = (src_bo.gpu_va & 0xffffffff00000000) >> 32;
266*7688df22SAndroid Build Coastguard Worker 	ib_cpu[4] = dst_bo.gpu_va & 0x00000000ffffffff;
267*7688df22SAndroid Build Coastguard Worker 	ib_cpu[5] = (dst_bo.gpu_va & 0xffffffff00000000) >> 32;
268*7688df22SAndroid Build Coastguard Worker 	// size is read from the lower 26bits.
269*7688df22SAndroid Build Coastguard Worker 	ib_cpu[6] = ((1 << 26) - 1) & DMA_SIZE;
270*7688df22SAndroid Build Coastguard Worker 	ib_cpu[7] = 0xffff1000;
271*7688df22SAndroid Build Coastguard Worker 
272*7688df22SAndroid Build Coastguard Worker 	num_dword = 8;
273*7688df22SAndroid Build Coastguard Worker 
274*7688df22SAndroid Build Coastguard Worker 	resources[0] = src_bo.buf_handle;
275*7688df22SAndroid Build Coastguard Worker 	resources[1] = dst_bo.buf_handle;
276*7688df22SAndroid Build Coastguard Worker 	resources[2] = ib_handle;
277*7688df22SAndroid Build Coastguard Worker 	num_resources = 3;
278*7688df22SAndroid Build Coastguard Worker }
279*7688df22SAndroid Build Coastguard Worker 
amdgpu_cp_dma(uint32_t src_heap,uint32_t dst_heap)280*7688df22SAndroid Build Coastguard Worker static void amdgpu_cp_dma(uint32_t src_heap, uint32_t dst_heap) {
281*7688df22SAndroid Build Coastguard Worker 	int r;
282*7688df22SAndroid Build Coastguard Worker 	struct amdgpu_cp_dma_bo src_bo = {0};
283*7688df22SAndroid Build Coastguard Worker 	struct amdgpu_cp_dma_bo dst_bo = {0};
284*7688df22SAndroid Build Coastguard Worker 	void *src_bo_cpu;
285*7688df22SAndroid Build Coastguard Worker 	void *dst_bo_cpu;
286*7688df22SAndroid Build Coastguard Worker 
287*7688df22SAndroid Build Coastguard Worker 	/* allocate the src bo, set its data to DMA_DATA_BYTE */
288*7688df22SAndroid Build Coastguard Worker 	r = allocate_bo_and_va(executing_device_handle, DMA_SIZE, 4096,
289*7688df22SAndroid Build Coastguard Worker 			src_heap, AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED, &src_bo);
290*7688df22SAndroid Build Coastguard Worker 	CU_ASSERT_EQUAL(r, 0);
291*7688df22SAndroid Build Coastguard Worker 
292*7688df22SAndroid Build Coastguard Worker 	r = amdgpu_bo_cpu_map(src_bo.buf_handle, (void **)&src_bo_cpu);
293*7688df22SAndroid Build Coastguard Worker 	CU_ASSERT_EQUAL(r, 0);
294*7688df22SAndroid Build Coastguard Worker 	memset(src_bo_cpu, DMA_DATA_BYTE, DMA_SIZE);
295*7688df22SAndroid Build Coastguard Worker 
296*7688df22SAndroid Build Coastguard Worker 	r = amdgpu_bo_cpu_unmap(src_bo.buf_handle);
297*7688df22SAndroid Build Coastguard Worker 	CU_ASSERT_EQUAL(r, 0);
298*7688df22SAndroid Build Coastguard Worker 
299*7688df22SAndroid Build Coastguard Worker 	/* allocate the dst bo and clear its content to all 0 */
300*7688df22SAndroid Build Coastguard Worker 	r = allocate_bo_and_va(executing_device_handle, DMA_SIZE, 4096,
301*7688df22SAndroid Build Coastguard Worker 			dst_heap, AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED, &dst_bo);
302*7688df22SAndroid Build Coastguard Worker 	CU_ASSERT_EQUAL(r, 0);
303*7688df22SAndroid Build Coastguard Worker 
304*7688df22SAndroid Build Coastguard Worker 	r = amdgpu_bo_cpu_map(dst_bo.buf_handle, (void **)&dst_bo_cpu);
305*7688df22SAndroid Build Coastguard Worker 	CU_ASSERT_EQUAL(r, 0);
306*7688df22SAndroid Build Coastguard Worker 
307*7688df22SAndroid Build Coastguard Worker 	_Static_assert(DMA_DATA_BYTE != 0, "Initialization data should be different from DMA data!");
308*7688df22SAndroid Build Coastguard Worker 	memset(dst_bo_cpu, 0, DMA_SIZE);
309*7688df22SAndroid Build Coastguard Worker 
310*7688df22SAndroid Build Coastguard Worker 	/* record CP DMA command and dispatch the command */
311*7688df22SAndroid Build Coastguard Worker 	cp_dma_cmd(src_bo, dst_bo);
312*7688df22SAndroid Build Coastguard Worker 
313*7688df22SAndroid Build Coastguard Worker 	r = submit_and_sync();
314*7688df22SAndroid Build Coastguard Worker 	CU_ASSERT_EQUAL(r, 0);
315*7688df22SAndroid Build Coastguard Worker 
316*7688df22SAndroid Build Coastguard Worker 	/* verify the dst bo is filled with DMA_DATA_BYTE */
317*7688df22SAndroid Build Coastguard Worker 	CU_ASSERT_EQUAL(memcmp(dst_bo_cpu, reference_data, DMA_SIZE) == 0, true);
318*7688df22SAndroid Build Coastguard Worker 
319*7688df22SAndroid Build Coastguard Worker 	r = amdgpu_bo_cpu_unmap(dst_bo.buf_handle);
320*7688df22SAndroid Build Coastguard Worker 	CU_ASSERT_EQUAL(r, 0);
321*7688df22SAndroid Build Coastguard Worker 
322*7688df22SAndroid Build Coastguard Worker 	r = free_bo(src_bo);
323*7688df22SAndroid Build Coastguard Worker 	CU_ASSERT_EQUAL(r, 0);
324*7688df22SAndroid Build Coastguard Worker 
325*7688df22SAndroid Build Coastguard Worker 	r = free_bo(dst_bo);
326*7688df22SAndroid Build Coastguard Worker 	CU_ASSERT_EQUAL(r, 0);
327*7688df22SAndroid Build Coastguard Worker }
328*7688df22SAndroid Build Coastguard Worker 
amdgpu_cp_dma_p2p(uint32_t src_heap,uint32_t dst_heap)329*7688df22SAndroid Build Coastguard Worker static void amdgpu_cp_dma_p2p(uint32_t src_heap, uint32_t dst_heap) {
330*7688df22SAndroid Build Coastguard Worker 	int r;
331*7688df22SAndroid Build Coastguard Worker 	struct amdgpu_cp_dma_bo exported_bo = {0};
332*7688df22SAndroid Build Coastguard Worker 	int dma_buf_fd;
333*7688df22SAndroid Build Coastguard Worker 	int dma_buf_fd_dup;
334*7688df22SAndroid Build Coastguard Worker 	struct amdgpu_cp_dma_bo src_bo = {0};
335*7688df22SAndroid Build Coastguard Worker 	struct amdgpu_cp_dma_bo imported_dst_bo = {0};
336*7688df22SAndroid Build Coastguard Worker 	void *exported_bo_cpu;
337*7688df22SAndroid Build Coastguard Worker 	void *src_bo_cpu;
338*7688df22SAndroid Build Coastguard Worker 
339*7688df22SAndroid Build Coastguard Worker 	/* allocate a bo on the peer device and export it to dma-buf */
340*7688df22SAndroid Build Coastguard Worker 	r = allocate_bo_and_va(peer_exporting_device_handle, DMA_SIZE, 4096,
341*7688df22SAndroid Build Coastguard Worker 			src_heap, AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED, &exported_bo);
342*7688df22SAndroid Build Coastguard Worker 	CU_ASSERT_EQUAL(r, 0);
343*7688df22SAndroid Build Coastguard Worker 
344*7688df22SAndroid Build Coastguard Worker 	/* map the exported bo and clear its content to 0 */
345*7688df22SAndroid Build Coastguard Worker 	_Static_assert(DMA_DATA_BYTE != 0, "Initialization data should be different from DMA data!");
346*7688df22SAndroid Build Coastguard Worker 	r = amdgpu_bo_cpu_map(exported_bo.buf_handle, (void **)&exported_bo_cpu);
347*7688df22SAndroid Build Coastguard Worker 	CU_ASSERT_EQUAL(r, 0);
348*7688df22SAndroid Build Coastguard Worker 	memset(exported_bo_cpu, 0, DMA_SIZE);
349*7688df22SAndroid Build Coastguard Worker 
350*7688df22SAndroid Build Coastguard Worker 	r = amdgpu_bo_export(exported_bo.buf_handle,
351*7688df22SAndroid Build Coastguard Worker 			amdgpu_bo_handle_type_dma_buf_fd, (uint32_t*)&dma_buf_fd);
352*7688df22SAndroid Build Coastguard Worker 	CU_ASSERT_EQUAL(r, 0);
353*7688df22SAndroid Build Coastguard Worker 
354*7688df22SAndroid Build Coastguard Worker     // According to amdgpu_drm:
355*7688df22SAndroid Build Coastguard Worker 	// "Buffer must be "imported" only using new "fd"
356*7688df22SAndroid Build Coastguard Worker 	// (different from one used by "exporter")"
357*7688df22SAndroid Build Coastguard Worker 	dma_buf_fd_dup = dup(dma_buf_fd);
358*7688df22SAndroid Build Coastguard Worker 	r = close(dma_buf_fd);
359*7688df22SAndroid Build Coastguard Worker 	CU_ASSERT_EQUAL(r, 0);
360*7688df22SAndroid Build Coastguard Worker 
361*7688df22SAndroid Build Coastguard Worker 	/* import the dma-buf to the executing device, imported bo is the DMA destination */
362*7688df22SAndroid Build Coastguard Worker 	r = import_dma_buf_to_bo(
363*7688df22SAndroid Build Coastguard Worker 			executing_device_handle, dma_buf_fd_dup, &imported_dst_bo);
364*7688df22SAndroid Build Coastguard Worker 	CU_ASSERT_EQUAL(r, 0);
365*7688df22SAndroid Build Coastguard Worker 
366*7688df22SAndroid Build Coastguard Worker 	r = close(dma_buf_fd_dup);
367*7688df22SAndroid Build Coastguard Worker 	CU_ASSERT_EQUAL(r, 0);
368*7688df22SAndroid Build Coastguard Worker 
369*7688df22SAndroid Build Coastguard Worker 	/* allocate the src bo and set its content to DMA_DATA_BYTE */
370*7688df22SAndroid Build Coastguard Worker 	r = allocate_bo_and_va(executing_device_handle, DMA_SIZE, 4096,
371*7688df22SAndroid Build Coastguard Worker 			dst_heap, AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED, &src_bo);
372*7688df22SAndroid Build Coastguard Worker 	CU_ASSERT_EQUAL(r, 0);
373*7688df22SAndroid Build Coastguard Worker 
374*7688df22SAndroid Build Coastguard Worker 	r = amdgpu_bo_cpu_map(src_bo.buf_handle, (void **)&src_bo_cpu);
375*7688df22SAndroid Build Coastguard Worker 	CU_ASSERT_EQUAL(r, 0);
376*7688df22SAndroid Build Coastguard Worker 
377*7688df22SAndroid Build Coastguard Worker 	memset(src_bo_cpu, DMA_DATA_BYTE, DMA_SIZE);
378*7688df22SAndroid Build Coastguard Worker 
379*7688df22SAndroid Build Coastguard Worker 	r = amdgpu_bo_cpu_unmap(src_bo.buf_handle);
380*7688df22SAndroid Build Coastguard Worker 	CU_ASSERT_EQUAL(r, 0);
381*7688df22SAndroid Build Coastguard Worker 
382*7688df22SAndroid Build Coastguard Worker 	/* record CP DMA command and dispatch the command */
383*7688df22SAndroid Build Coastguard Worker 	cp_dma_cmd(src_bo, imported_dst_bo);
384*7688df22SAndroid Build Coastguard Worker 
385*7688df22SAndroid Build Coastguard Worker 	r = submit_and_sync();
386*7688df22SAndroid Build Coastguard Worker 	CU_ASSERT_EQUAL(r, 0);
387*7688df22SAndroid Build Coastguard Worker 
388*7688df22SAndroid Build Coastguard Worker 	/* verify the bo from the peer device is filled with DMA_DATA_BYTE */
389*7688df22SAndroid Build Coastguard Worker 	CU_ASSERT_EQUAL(memcmp(exported_bo_cpu, reference_data, DMA_SIZE) == 0, true);
390*7688df22SAndroid Build Coastguard Worker 
391*7688df22SAndroid Build Coastguard Worker 	r = amdgpu_bo_cpu_unmap(exported_bo.buf_handle);
392*7688df22SAndroid Build Coastguard Worker 	CU_ASSERT_EQUAL(r, 0);
393*7688df22SAndroid Build Coastguard Worker 
394*7688df22SAndroid Build Coastguard Worker 	r = free_bo(exported_bo);
395*7688df22SAndroid Build Coastguard Worker 	CU_ASSERT_EQUAL(r, 0);
396*7688df22SAndroid Build Coastguard Worker 
397*7688df22SAndroid Build Coastguard Worker 	r = free_bo(imported_dst_bo);
398*7688df22SAndroid Build Coastguard Worker 	CU_ASSERT_EQUAL(r, 0);
399*7688df22SAndroid Build Coastguard Worker 
400*7688df22SAndroid Build Coastguard Worker 	r = free_bo(src_bo);
401*7688df22SAndroid Build Coastguard Worker 	CU_ASSERT_EQUAL(r, 0);
402*7688df22SAndroid Build Coastguard Worker }
403*7688df22SAndroid Build Coastguard Worker 
amdgpu_cp_dma_host_to_vram(void)404*7688df22SAndroid Build Coastguard Worker static void amdgpu_cp_dma_host_to_vram(void) {
405*7688df22SAndroid Build Coastguard Worker 	amdgpu_cp_dma(AMDGPU_GEM_DOMAIN_GTT, AMDGPU_GEM_DOMAIN_VRAM);
406*7688df22SAndroid Build Coastguard Worker }
407*7688df22SAndroid Build Coastguard Worker 
amdgpu_cp_dma_vram_to_host(void)408*7688df22SAndroid Build Coastguard Worker static void amdgpu_cp_dma_vram_to_host(void) {
409*7688df22SAndroid Build Coastguard Worker 	amdgpu_cp_dma(AMDGPU_GEM_DOMAIN_VRAM, AMDGPU_GEM_DOMAIN_GTT);
410*7688df22SAndroid Build Coastguard Worker }
411*7688df22SAndroid Build Coastguard Worker 
amdgpu_cp_dma_p2p_vram_to_vram(void)412*7688df22SAndroid Build Coastguard Worker static void amdgpu_cp_dma_p2p_vram_to_vram(void) {
413*7688df22SAndroid Build Coastguard Worker 	amdgpu_cp_dma_p2p(AMDGPU_GEM_DOMAIN_VRAM, AMDGPU_GEM_DOMAIN_VRAM);
414*7688df22SAndroid Build Coastguard Worker }
415*7688df22SAndroid Build Coastguard Worker 
amdgpu_cp_dma_p2p_host_to_vram(void)416*7688df22SAndroid Build Coastguard Worker static void amdgpu_cp_dma_p2p_host_to_vram(void) {
417*7688df22SAndroid Build Coastguard Worker 	amdgpu_cp_dma_p2p(AMDGPU_GEM_DOMAIN_GTT, AMDGPU_GEM_DOMAIN_VRAM);
418*7688df22SAndroid Build Coastguard Worker }
419*7688df22SAndroid Build Coastguard Worker 
amdgpu_cp_dma_p2p_vram_to_host(void)420*7688df22SAndroid Build Coastguard Worker static void amdgpu_cp_dma_p2p_vram_to_host(void) {
421*7688df22SAndroid Build Coastguard Worker 	amdgpu_cp_dma_p2p(AMDGPU_GEM_DOMAIN_VRAM, AMDGPU_GEM_DOMAIN_GTT);
422*7688df22SAndroid Build Coastguard Worker }
423*7688df22SAndroid Build Coastguard Worker 
suite_cp_dma_tests_init()424*7688df22SAndroid Build Coastguard Worker int suite_cp_dma_tests_init() {
425*7688df22SAndroid Build Coastguard Worker 	int r;
426*7688df22SAndroid Build Coastguard Worker 
427*7688df22SAndroid Build Coastguard Worker 	r = amdgpu_device_initialize(drm_amdgpu[0],
428*7688df22SAndroid Build Coastguard Worker 			&executing_device_major_version,
429*7688df22SAndroid Build Coastguard Worker 			&executing_device_minor_version,
430*7688df22SAndroid Build Coastguard Worker 			&executing_device_handle);
431*7688df22SAndroid Build Coastguard Worker 	if (r)
432*7688df22SAndroid Build Coastguard Worker 		return CUE_SINIT_FAILED;
433*7688df22SAndroid Build Coastguard Worker 
434*7688df22SAndroid Build Coastguard Worker 	r = amdgpu_cs_ctx_create(executing_device_handle, &context_handle);
435*7688df22SAndroid Build Coastguard Worker 	if (r)
436*7688df22SAndroid Build Coastguard Worker 		return CUE_SINIT_FAILED;
437*7688df22SAndroid Build Coastguard Worker 
438*7688df22SAndroid Build Coastguard Worker 	r = amdgpu_bo_alloc_and_map(executing_device_handle, IB_SIZE, 4096,
439*7688df22SAndroid Build Coastguard Worker 					AMDGPU_GEM_DOMAIN_GTT, 0,
440*7688df22SAndroid Build Coastguard Worker 					&ib_handle, (void**)&ib_cpu,
441*7688df22SAndroid Build Coastguard Worker 					&ib_mc_address, &ib_va_handle);
442*7688df22SAndroid Build Coastguard Worker 	if (r)
443*7688df22SAndroid Build Coastguard Worker 		return CUE_SINIT_FAILED;
444*7688df22SAndroid Build Coastguard Worker 
445*7688df22SAndroid Build Coastguard Worker 	if (do_p2p) {
446*7688df22SAndroid Build Coastguard Worker 		r = amdgpu_device_initialize(drm_amdgpu[1],
447*7688df22SAndroid Build Coastguard Worker 				&peer_exporting_device_major_version,
448*7688df22SAndroid Build Coastguard Worker 				&peer_exporting_device_minor_version,
449*7688df22SAndroid Build Coastguard Worker 				&peer_exporting_device_handle);
450*7688df22SAndroid Build Coastguard Worker 
451*7688df22SAndroid Build Coastguard Worker 		if (r)
452*7688df22SAndroid Build Coastguard Worker 			return CUE_SINIT_FAILED;
453*7688df22SAndroid Build Coastguard Worker 	}
454*7688df22SAndroid Build Coastguard Worker 
455*7688df22SAndroid Build Coastguard Worker 	reference_data = (uint8_t*)malloc(DMA_SIZE);
456*7688df22SAndroid Build Coastguard Worker 	if (!reference_data)
457*7688df22SAndroid Build Coastguard Worker 		return CUE_SINIT_FAILED;
458*7688df22SAndroid Build Coastguard Worker 	memset(reference_data, DMA_DATA_BYTE, DMA_SIZE);
459*7688df22SAndroid Build Coastguard Worker 
460*7688df22SAndroid Build Coastguard Worker 	return CUE_SUCCESS;
461*7688df22SAndroid Build Coastguard Worker }
462*7688df22SAndroid Build Coastguard Worker 
suite_cp_dma_tests_clean()463*7688df22SAndroid Build Coastguard Worker int suite_cp_dma_tests_clean() {
464*7688df22SAndroid Build Coastguard Worker 	int r;
465*7688df22SAndroid Build Coastguard Worker 
466*7688df22SAndroid Build Coastguard Worker 	free(reference_data);
467*7688df22SAndroid Build Coastguard Worker 
468*7688df22SAndroid Build Coastguard Worker 	r = amdgpu_bo_unmap_and_free(ib_handle, ib_va_handle,
469*7688df22SAndroid Build Coastguard Worker 				 ib_mc_address, IB_SIZE);
470*7688df22SAndroid Build Coastguard Worker 	if (r)
471*7688df22SAndroid Build Coastguard Worker 		return CUE_SCLEAN_FAILED;
472*7688df22SAndroid Build Coastguard Worker 
473*7688df22SAndroid Build Coastguard Worker 	r = amdgpu_cs_ctx_free(context_handle);
474*7688df22SAndroid Build Coastguard Worker 	if (r)
475*7688df22SAndroid Build Coastguard Worker 		return CUE_SCLEAN_FAILED;
476*7688df22SAndroid Build Coastguard Worker 
477*7688df22SAndroid Build Coastguard Worker 	r = amdgpu_device_deinitialize(executing_device_handle);
478*7688df22SAndroid Build Coastguard Worker 	if (r)
479*7688df22SAndroid Build Coastguard Worker 		return CUE_SCLEAN_FAILED;
480*7688df22SAndroid Build Coastguard Worker 
481*7688df22SAndroid Build Coastguard Worker 	if (do_p2p) {
482*7688df22SAndroid Build Coastguard Worker 		r = amdgpu_device_deinitialize(peer_exporting_device_handle);
483*7688df22SAndroid Build Coastguard Worker 		if (r)
484*7688df22SAndroid Build Coastguard Worker 			return CUE_SCLEAN_FAILED;
485*7688df22SAndroid Build Coastguard Worker 	}
486*7688df22SAndroid Build Coastguard Worker 
487*7688df22SAndroid Build Coastguard Worker 	return CUE_SUCCESS;
488*7688df22SAndroid Build Coastguard Worker }
489*7688df22SAndroid Build Coastguard Worker 
suite_cp_dma_tests_enable(void)490*7688df22SAndroid Build Coastguard Worker CU_BOOL suite_cp_dma_tests_enable(void) {
491*7688df22SAndroid Build Coastguard Worker 	int r = 0;
492*7688df22SAndroid Build Coastguard Worker 
493*7688df22SAndroid Build Coastguard Worker 	if (amdgpu_device_initialize(drm_amdgpu[0],
494*7688df22SAndroid Build Coastguard Worker 			&executing_device_major_version,
495*7688df22SAndroid Build Coastguard Worker 			&executing_device_minor_version,
496*7688df22SAndroid Build Coastguard Worker 			&executing_device_handle))
497*7688df22SAndroid Build Coastguard Worker 		return CU_FALSE;
498*7688df22SAndroid Build Coastguard Worker 
499*7688df22SAndroid Build Coastguard Worker 	if (!(executing_device_handle->info.family_id >= AMDGPU_FAMILY_AI &&
500*7688df22SAndroid Build Coastguard Worker 			executing_device_handle->info.family_id <= AMDGPU_FAMILY_NV)) {
501*7688df22SAndroid Build Coastguard Worker 		printf("Testing device has ASIC that is not supported by CP-DMA test suite!\n");
502*7688df22SAndroid Build Coastguard Worker 		return CU_FALSE;
503*7688df22SAndroid Build Coastguard Worker 	}
504*7688df22SAndroid Build Coastguard Worker 
505*7688df22SAndroid Build Coastguard Worker 	if (amdgpu_device_deinitialize(executing_device_handle))
506*7688df22SAndroid Build Coastguard Worker 		return CU_FALSE;
507*7688df22SAndroid Build Coastguard Worker 
508*7688df22SAndroid Build Coastguard Worker 	if (drm_amdgpu[1] >= 0) {
509*7688df22SAndroid Build Coastguard Worker 		r = amdgpu_device_initialize(drm_amdgpu[1],
510*7688df22SAndroid Build Coastguard Worker 				&peer_exporting_device_major_version,
511*7688df22SAndroid Build Coastguard Worker 				&peer_exporting_device_minor_version,
512*7688df22SAndroid Build Coastguard Worker 				&peer_exporting_device_handle);
513*7688df22SAndroid Build Coastguard Worker 
514*7688df22SAndroid Build Coastguard Worker 		if (r == 0 && (peer_exporting_device_handle->info.family_id >= AMDGPU_FAMILY_AI &&
515*7688df22SAndroid Build Coastguard Worker 						peer_exporting_device_handle->info.family_id <= AMDGPU_FAMILY_NV)) {
516*7688df22SAndroid Build Coastguard Worker 			do_p2p = true;
517*7688df22SAndroid Build Coastguard Worker 		}
518*7688df22SAndroid Build Coastguard Worker 
519*7688df22SAndroid Build Coastguard Worker 		if (r == 0 && amdgpu_device_deinitialize(peer_exporting_device_handle) != 0) {
520*7688df22SAndroid Build Coastguard Worker 			printf("Deinitialize peer_exporting_device_handle failed!\n");
521*7688df22SAndroid Build Coastguard Worker 			return CU_FALSE;
522*7688df22SAndroid Build Coastguard Worker 		}
523*7688df22SAndroid Build Coastguard Worker 	}
524*7688df22SAndroid Build Coastguard Worker 
525*7688df22SAndroid Build Coastguard Worker 	if (!do_p2p) {
526*7688df22SAndroid Build Coastguard Worker 		amdgpu_set_test_active("CP DMA Tests", "Peer to Peer CP DMA write VRAM to VRAM", CU_FALSE);
527*7688df22SAndroid Build Coastguard Worker 		amdgpu_set_test_active("CP DMA Tests", "Peer to Peer CP DMA write Host to VRAM", CU_FALSE);
528*7688df22SAndroid Build Coastguard Worker 		amdgpu_set_test_active("CP DMA Tests", "Peer to Peer CP DMA write VRAM to Host", CU_FALSE);
529*7688df22SAndroid Build Coastguard Worker 		printf("Peer device is not opened or has ASIC not supported by the suite, skip all Peer to Peer tests.\n");
530*7688df22SAndroid Build Coastguard Worker 	}
531*7688df22SAndroid Build Coastguard Worker 
532*7688df22SAndroid Build Coastguard Worker 	return CU_TRUE;
533*7688df22SAndroid Build Coastguard Worker }
534