basic_tests.c revision 25784d3af2f37d86fb25ee6cfa4afa6f3448af9b
13c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher/* 23c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher * Copyright 2014 Advanced Micro Devices, Inc. 33c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher * 43c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher * Permission is hereby granted, free of charge, to any person obtaining a 53c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher * copy of this software and associated documentation files (the "Software"), 63c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher * to deal in the Software without restriction, including without limitation 73c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher * the rights to use, copy, modify, merge, publish, distribute, sublicense, 83c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher * and/or sell copies of the Software, and to permit persons to whom the 93c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher * Software is furnished to do so, subject to the following conditions: 103c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher * 113c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher * The above copyright notice and this permission notice shall be included in 123c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher * all copies or substantial portions of the Software. 133c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher * 143c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 153c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 163c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 173c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 183c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 193c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 203c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher * OTHER DEALINGS IN THE SOFTWARE. 213c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher * 223c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher*/ 2325784d3af2f37d86fb25ee6cfa4afa6f3448af9bMichel Dänzer 2425784d3af2f37d86fb25ee6cfa4afa6f3448af9bMichel Dänzer#ifdef HAVE_CONFIG_H 2525784d3af2f37d86fb25ee6cfa4afa6f3448af9bMichel Dänzer#include "config.h" 2625784d3af2f37d86fb25ee6cfa4afa6f3448af9bMichel Dänzer#endif 2725784d3af2f37d86fb25ee6cfa4afa6f3448af9bMichel Dänzer 283c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher#include <stdio.h> 293c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher#include <stdlib.h> 303c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher#include <unistd.h> 313c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 323c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher#include "CUnit/Basic.h" 333c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 343c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher#include "amdgpu_test.h" 353c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher#include "amdgpu_drm.h" 363c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 373c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucherstatic amdgpu_device_handle device_handle; 383c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucherstatic uint32_t major_version; 393c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucherstatic uint32_t minor_version; 403c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 413c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucherstatic void amdgpu_query_info_test(void); 423c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucherstatic void amdgpu_memory_alloc(void); 433c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucherstatic void amdgpu_command_submission_gfx(void); 443c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucherstatic void amdgpu_command_submission_compute(void); 453c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucherstatic void amdgpu_command_submission_sdma(void); 463c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucherstatic void amdgpu_userptr_test(void); 473c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 483c5fe78801dbadc82cc25f4a63a983fea15d938bAlex DeucherCU_TestInfo basic_tests[] = { 493c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher { "Query Info Test", amdgpu_query_info_test }, 503c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher { "Memory alloc Test", amdgpu_memory_alloc }, 513c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher { "Userptr Test", amdgpu_userptr_test }, 523c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher { "Command submission Test (GFX)", amdgpu_command_submission_gfx }, 533c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher { "Command submission Test (Compute)", amdgpu_command_submission_compute }, 543c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher { "Command submission Test (SDMA)", amdgpu_command_submission_sdma }, 553c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_TEST_INFO_NULL, 563c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher}; 573c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher#define BUFFER_SIZE (8 * 1024) 583c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher#define SDMA_PKT_HEADER_op_offset 0 593c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher#define SDMA_PKT_HEADER_op_mask 0x000000FF 603c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher#define SDMA_PKT_HEADER_op_shift 0 613c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher#define SDMA_PKT_HEADER_OP(x) (((x) & SDMA_PKT_HEADER_op_mask) << SDMA_PKT_HEADER_op_shift) 623c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher#define SDMA_OPCODE_CONSTANT_FILL 11 633c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher# define SDMA_CONSTANT_FILL_EXTRA_SIZE(x) ((x) << 14) 643c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher /* 0 = byte fill 653c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher * 2 = DW fill 663c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher */ 673c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher#define SDMA_PACKET(op, sub_op, e) ((((e) & 0xFFFF) << 16) | \ 683c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher (((sub_op) & 0xFF) << 8) | \ 693c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher (((op) & 0xFF) << 0)) 703c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher#define SDMA_OPCODE_WRITE 2 713c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher# define SDMA_WRITE_SUB_OPCODE_LINEAR 0 723c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher# define SDMA_WRTIE_SUB_OPCODE_TILED 1 733c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 743c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher#define SDMA_OPCODE_COPY 1 753c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher# define SDMA_COPY_SUB_OPCODE_LINEAR 0 763c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 773c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucherint suite_basic_tests_init(void) 783c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher{ 793c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher int r; 803c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 813c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher r = amdgpu_device_initialize(drm_amdgpu[0], &major_version, 823c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher &minor_version, &device_handle); 833c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 843c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher if (r == 0) 853c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher return CUE_SUCCESS; 863c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher else 873c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher return CUE_SINIT_FAILED; 883c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher} 893c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 903c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucherint suite_basic_tests_clean(void) 913c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher{ 923c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher int r = amdgpu_device_deinitialize(device_handle); 933c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 943c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher if (r == 0) 953c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher return CUE_SUCCESS; 963c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher else 973c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher return CUE_SCLEAN_FAILED; 983c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher} 993c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 1003c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucherstatic void amdgpu_query_info_test(void) 1013c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher{ 1023c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher struct amdgpu_gpu_info gpu_info = {0}; 1033c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher uint32_t version, feature; 1043c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher int r; 1053c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 1063c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher r = amdgpu_query_gpu_info(device_handle, &gpu_info); 1073c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_EQUAL(r, 0); 1083c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 1093c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher r = amdgpu_query_firmware_version(device_handle, AMDGPU_INFO_FW_VCE, 0, 1103c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 0, &version, &feature); 1113c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_EQUAL(r, 0); 1123c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher} 1133c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 1143c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucherstatic void amdgpu_memory_alloc(void) 1153c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher{ 1163c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher amdgpu_bo_handle bo; 1178aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou amdgpu_va_handle va_handle; 1183c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher uint64_t bo_mc; 1193c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher int r; 1203c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 1213c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher /* Test visible VRAM */ 1223c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher bo = gpu_mem_alloc(device_handle, 1233c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 4096, 4096, 1243c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher AMDGPU_GEM_DOMAIN_VRAM, 1253c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED, 1268aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou &bo_mc, &va_handle); 1273c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 1288aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou r = gpu_mem_free(bo, va_handle, bo_mc, 4096); 1293c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_EQUAL(r, 0); 1303c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 1313c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher /* Test invisible VRAM */ 1323c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher bo = gpu_mem_alloc(device_handle, 1333c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 4096, 4096, 1343c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher AMDGPU_GEM_DOMAIN_VRAM, 1353c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher AMDGPU_GEM_CREATE_NO_CPU_ACCESS, 1368aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou &bo_mc, &va_handle); 1373c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 1388aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou r = gpu_mem_free(bo, va_handle, bo_mc, 4096); 1393c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_EQUAL(r, 0); 1403c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 1413c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher /* Test GART Cacheable */ 1423c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher bo = gpu_mem_alloc(device_handle, 1433c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 4096, 4096, 1443c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher AMDGPU_GEM_DOMAIN_GTT, 1458aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou 0, &bo_mc, &va_handle); 1463c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 1478aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou r = gpu_mem_free(bo, va_handle, bo_mc, 4096); 1483c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_EQUAL(r, 0); 1493c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 1503c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher /* Test GART USWC */ 1513c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher bo = gpu_mem_alloc(device_handle, 1523c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 4096, 4096, 1533c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher AMDGPU_GEM_DOMAIN_GTT, 154a4c832117940880c28eec15bfae8040f2a93a733Jammy Zhou AMDGPU_GEM_CREATE_CPU_GTT_USWC, 1558aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou &bo_mc, &va_handle); 1563c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 1578aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou r = gpu_mem_free(bo, va_handle, bo_mc, 4096); 1583c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_EQUAL(r, 0); 1593c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher} 1603c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 161ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhoustatic void amdgpu_command_submission_gfx_separate_ibs(void) 1623c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher{ 1633c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher amdgpu_context_handle context_handle; 164646f5411cf36413c903eb6db48b5e7febd893ec5Marek Olšák amdgpu_bo_handle ib_result_handle, ib_result_ce_handle; 165646f5411cf36413c903eb6db48b5e7febd893ec5Marek Olšák void *ib_result_cpu, *ib_result_ce_cpu; 166646f5411cf36413c903eb6db48b5e7febd893ec5Marek Olšák uint64_t ib_result_mc_address, ib_result_ce_mc_address; 1673c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher struct amdgpu_cs_request ibs_request = {0}; 1683c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher struct amdgpu_cs_ib_info ib_info[2]; 1695463d2e83a450a0428f6c46561c5e2a54a229589Christian König struct amdgpu_cs_fence fence_status = {0}; 1703c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher uint32_t *ptr; 1713c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher uint32_t expired; 17276af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák amdgpu_bo_list_handle bo_list; 1738aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou amdgpu_va_handle va_handle, va_handle_ce; 1743c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher int r; 1753c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 1763c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher r = amdgpu_cs_ctx_create(device_handle, &context_handle); 1773c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_EQUAL(r, 0); 1783c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 179646f5411cf36413c903eb6db48b5e7febd893ec5Marek Olšák r = amdgpu_bo_alloc_and_map(device_handle, 4096, 4096, 180646f5411cf36413c903eb6db48b5e7febd893ec5Marek Olšák AMDGPU_GEM_DOMAIN_GTT, 0, 181646f5411cf36413c903eb6db48b5e7febd893ec5Marek Olšák &ib_result_handle, &ib_result_cpu, 1828aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou &ib_result_mc_address, &va_handle); 1833c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_EQUAL(r, 0); 1843c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 185646f5411cf36413c903eb6db48b5e7febd893ec5Marek Olšák r = amdgpu_bo_alloc_and_map(device_handle, 4096, 4096, 186646f5411cf36413c903eb6db48b5e7febd893ec5Marek Olšák AMDGPU_GEM_DOMAIN_GTT, 0, 187646f5411cf36413c903eb6db48b5e7febd893ec5Marek Olšák &ib_result_ce_handle, &ib_result_ce_cpu, 1888aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou &ib_result_ce_mc_address, &va_handle_ce); 1893c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_EQUAL(r, 0); 1903c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 19176af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák r = amdgpu_get_bo_list(device_handle, ib_result_handle, 19276af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák ib_result_ce_handle, &bo_list); 19376af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák CU_ASSERT_EQUAL(r, 0); 19476af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák 1953c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher memset(ib_info, 0, 2 * sizeof(struct amdgpu_cs_ib_info)); 1963c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 1973c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher /* IT_SET_CE_DE_COUNTERS */ 198646f5411cf36413c903eb6db48b5e7febd893ec5Marek Olšák ptr = ib_result_ce_cpu; 1993c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher ptr[0] = 0xc0008900; 2003c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher ptr[1] = 0; 2013c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher ptr[2] = 0xc0008400; 2023c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher ptr[3] = 1; 20376af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák ib_info[0].ib_mc_address = ib_result_ce_mc_address; 2043c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher ib_info[0].size = 4; 205db126d1d8a764b9d3ad322779b13904867b14e5cJammy Zhou ib_info[0].flags = AMDGPU_IB_FLAG_CE; 2063c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 2073c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher /* IT_WAIT_ON_CE_COUNTER */ 208646f5411cf36413c903eb6db48b5e7febd893ec5Marek Olšák ptr = ib_result_cpu; 2093c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher ptr[0] = 0xc0008600; 2103c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher ptr[1] = 0x00000001; 21176af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák ib_info[1].ib_mc_address = ib_result_mc_address; 2123c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher ib_info[1].size = 2; 2133c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 2143c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher ibs_request.ip_type = AMDGPU_HW_IP_GFX; 2153c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher ibs_request.number_of_ibs = 2; 2163c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher ibs_request.ibs = ib_info; 21776af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák ibs_request.resources = bo_list; 218926c80568691e04abdfcd21b6e9be61331e95b03Ken Wang ibs_request.fence_info.handle = NULL; 219926c80568691e04abdfcd21b6e9be61331e95b03Ken Wang 220926c80568691e04abdfcd21b6e9be61331e95b03Ken Wang r = amdgpu_cs_submit(context_handle, 0,&ibs_request, 1); 2213c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 2223c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_EQUAL(r, 0); 2233c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 2243c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher fence_status.context = context_handle; 2253c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher fence_status.ip_type = AMDGPU_HW_IP_GFX; 226926c80568691e04abdfcd21b6e9be61331e95b03Ken Wang fence_status.fence = ibs_request.seq_no; 2273c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 228f91b56dc8c604ec1c6f092d69550266d20dc9764Jammy Zhou r = amdgpu_cs_query_fence_status(&fence_status, 229f91b56dc8c604ec1c6f092d69550266d20dc9764Jammy Zhou AMDGPU_TIMEOUT_INFINITE, 230f91b56dc8c604ec1c6f092d69550266d20dc9764Jammy Zhou 0, &expired); 2313c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_EQUAL(r, 0); 2323c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 2338aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou r = amdgpu_bo_unmap_and_free(ib_result_handle, va_handle, 2348aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou ib_result_mc_address, 4096); 2351041cfdc38692721364557ce61d7abe71a1a9cbfJammy Zhou CU_ASSERT_EQUAL(r, 0); 2361041cfdc38692721364557ce61d7abe71a1a9cbfJammy Zhou 2378aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou r = amdgpu_bo_unmap_and_free(ib_result_ce_handle, va_handle_ce, 2388aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou ib_result_ce_mc_address, 4096); 2391041cfdc38692721364557ce61d7abe71a1a9cbfJammy Zhou CU_ASSERT_EQUAL(r, 0); 2401041cfdc38692721364557ce61d7abe71a1a9cbfJammy Zhou 24176af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák r = amdgpu_bo_list_destroy(bo_list); 24276af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák CU_ASSERT_EQUAL(r, 0); 24376af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák 2449c2afffedb773da27fd7506b31fc2164f329d3a8Christian König r = amdgpu_cs_ctx_free(context_handle); 2453c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_EQUAL(r, 0); 246926c80568691e04abdfcd21b6e9be61331e95b03Ken Wang 2473c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher} 2483c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 249ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhoustatic void amdgpu_command_submission_gfx_shared_ib(void) 250ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou{ 251ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou amdgpu_context_handle context_handle; 252646f5411cf36413c903eb6db48b5e7febd893ec5Marek Olšák amdgpu_bo_handle ib_result_handle; 253646f5411cf36413c903eb6db48b5e7febd893ec5Marek Olšák void *ib_result_cpu; 254646f5411cf36413c903eb6db48b5e7febd893ec5Marek Olšák uint64_t ib_result_mc_address; 255ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou struct amdgpu_cs_request ibs_request = {0}; 256ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou struct amdgpu_cs_ib_info ib_info[2]; 2575463d2e83a450a0428f6c46561c5e2a54a229589Christian König struct amdgpu_cs_fence fence_status = {0}; 258ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou uint32_t *ptr; 259ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou uint32_t expired; 26076af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák amdgpu_bo_list_handle bo_list; 2618aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou amdgpu_va_handle va_handle; 262ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou int r; 263ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou 264ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou r = amdgpu_cs_ctx_create(device_handle, &context_handle); 265ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou CU_ASSERT_EQUAL(r, 0); 266ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou 267646f5411cf36413c903eb6db48b5e7febd893ec5Marek Olšák r = amdgpu_bo_alloc_and_map(device_handle, 4096, 4096, 268646f5411cf36413c903eb6db48b5e7febd893ec5Marek Olšák AMDGPU_GEM_DOMAIN_GTT, 0, 269646f5411cf36413c903eb6db48b5e7febd893ec5Marek Olšák &ib_result_handle, &ib_result_cpu, 2708aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou &ib_result_mc_address, &va_handle); 271ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou CU_ASSERT_EQUAL(r, 0); 272ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou 27376af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák r = amdgpu_get_bo_list(device_handle, ib_result_handle, NULL, 27476af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák &bo_list); 27576af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák CU_ASSERT_EQUAL(r, 0); 27676af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák 277ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou memset(ib_info, 0, 2 * sizeof(struct amdgpu_cs_ib_info)); 278ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou 279ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou /* IT_SET_CE_DE_COUNTERS */ 280646f5411cf36413c903eb6db48b5e7febd893ec5Marek Olšák ptr = ib_result_cpu; 281ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou ptr[0] = 0xc0008900; 282ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou ptr[1] = 0; 283ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou ptr[2] = 0xc0008400; 284ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou ptr[3] = 1; 28576af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák ib_info[0].ib_mc_address = ib_result_mc_address; 286ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou ib_info[0].size = 4; 287ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou ib_info[0].flags = AMDGPU_IB_FLAG_CE; 288ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou 289646f5411cf36413c903eb6db48b5e7febd893ec5Marek Olšák ptr = (uint32_t *)ib_result_cpu + 4; 290ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou ptr[0] = 0xc0008600; 291ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou ptr[1] = 0x00000001; 29276af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák ib_info[1].ib_mc_address = ib_result_mc_address + 16; 293ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou ib_info[1].size = 2; 294ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou 295ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou ibs_request.ip_type = AMDGPU_HW_IP_GFX; 296ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou ibs_request.number_of_ibs = 2; 297ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou ibs_request.ibs = ib_info; 29876af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák ibs_request.resources = bo_list; 299926c80568691e04abdfcd21b6e9be61331e95b03Ken Wang ibs_request.fence_info.handle = NULL; 300926c80568691e04abdfcd21b6e9be61331e95b03Ken Wang 301926c80568691e04abdfcd21b6e9be61331e95b03Ken Wang r = amdgpu_cs_submit(context_handle, 0, &ibs_request, 1); 302ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou 303ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou CU_ASSERT_EQUAL(r, 0); 304ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou 305ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou fence_status.context = context_handle; 306ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou fence_status.ip_type = AMDGPU_HW_IP_GFX; 307926c80568691e04abdfcd21b6e9be61331e95b03Ken Wang fence_status.fence = ibs_request.seq_no; 308ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou 309f91b56dc8c604ec1c6f092d69550266d20dc9764Jammy Zhou r = amdgpu_cs_query_fence_status(&fence_status, 310f91b56dc8c604ec1c6f092d69550266d20dc9764Jammy Zhou AMDGPU_TIMEOUT_INFINITE, 311f91b56dc8c604ec1c6f092d69550266d20dc9764Jammy Zhou 0, &expired); 312ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou CU_ASSERT_EQUAL(r, 0); 313ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou 3148aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou r = amdgpu_bo_unmap_and_free(ib_result_handle, va_handle, 3158aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou ib_result_mc_address, 4096); 3161041cfdc38692721364557ce61d7abe71a1a9cbfJammy Zhou CU_ASSERT_EQUAL(r, 0); 3171041cfdc38692721364557ce61d7abe71a1a9cbfJammy Zhou 31876af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák r = amdgpu_bo_list_destroy(bo_list); 31976af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák CU_ASSERT_EQUAL(r, 0); 32076af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák 321ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou r = amdgpu_cs_ctx_free(context_handle); 322ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou CU_ASSERT_EQUAL(r, 0); 323ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou} 324ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou 325ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhoustatic void amdgpu_command_submission_gfx(void) 326ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou{ 327ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou /* separate IB buffers for multi-IB submission */ 328ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou amdgpu_command_submission_gfx_separate_ibs(); 329ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou /* shared IB buffer for multi-IB submission */ 330ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou amdgpu_command_submission_gfx_shared_ib(); 331ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou} 332ba1653eff8bd8ecc3d5fd5b2bbab604878cfa7e0Jammy Zhou 3333c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucherstatic void amdgpu_command_submission_compute(void) 3343c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher{ 3353c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher amdgpu_context_handle context_handle; 336646f5411cf36413c903eb6db48b5e7febd893ec5Marek Olšák amdgpu_bo_handle ib_result_handle; 337646f5411cf36413c903eb6db48b5e7febd893ec5Marek Olšák void *ib_result_cpu; 338646f5411cf36413c903eb6db48b5e7febd893ec5Marek Olšák uint64_t ib_result_mc_address; 3393c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher struct amdgpu_cs_request ibs_request; 3403c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher struct amdgpu_cs_ib_info ib_info; 3415463d2e83a450a0428f6c46561c5e2a54a229589Christian König struct amdgpu_cs_fence fence_status; 3423c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher uint32_t *ptr; 3433c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher uint32_t expired; 3443c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher int i, r, instance; 34576af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák amdgpu_bo_list_handle bo_list; 3468aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou amdgpu_va_handle va_handle; 3473c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 3483c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher r = amdgpu_cs_ctx_create(device_handle, &context_handle); 3493c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_EQUAL(r, 0); 3503c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 3513c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher for (instance = 0; instance < 8; instance++) { 352646f5411cf36413c903eb6db48b5e7febd893ec5Marek Olšák r = amdgpu_bo_alloc_and_map(device_handle, 4096, 4096, 353646f5411cf36413c903eb6db48b5e7febd893ec5Marek Olšák AMDGPU_GEM_DOMAIN_GTT, 0, 354646f5411cf36413c903eb6db48b5e7febd893ec5Marek Olšák &ib_result_handle, &ib_result_cpu, 3558aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou &ib_result_mc_address, &va_handle); 3563c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_EQUAL(r, 0); 3573c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 35876af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák r = amdgpu_get_bo_list(device_handle, ib_result_handle, NULL, 35976af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák &bo_list); 36076af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák CU_ASSERT_EQUAL(r, 0); 36176af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák 362646f5411cf36413c903eb6db48b5e7febd893ec5Marek Olšák ptr = ib_result_cpu; 3633c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher for (i = 0; i < 16; ++i) 3643c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher ptr[i] = 0xffff1000; 3653c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 3663c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher memset(&ib_info, 0, sizeof(struct amdgpu_cs_ib_info)); 36776af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák ib_info.ib_mc_address = ib_result_mc_address; 3683c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher ib_info.size = 16; 3693c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 3703c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher memset(&ibs_request, 0, sizeof(struct amdgpu_cs_request)); 3713c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher ibs_request.ip_type = AMDGPU_HW_IP_COMPUTE; 3723c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher ibs_request.ring = instance; 3733c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher ibs_request.number_of_ibs = 1; 3743c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher ibs_request.ibs = &ib_info; 37576af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák ibs_request.resources = bo_list; 376926c80568691e04abdfcd21b6e9be61331e95b03Ken Wang ibs_request.fence_info.handle = NULL; 3773c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 3785463d2e83a450a0428f6c46561c5e2a54a229589Christian König memset(&fence_status, 0, sizeof(struct amdgpu_cs_fence)); 379926c80568691e04abdfcd21b6e9be61331e95b03Ken Wang r = amdgpu_cs_submit(context_handle, 0,&ibs_request, 1); 3803c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_EQUAL(r, 0); 3813c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 3823c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher fence_status.context = context_handle; 3833c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher fence_status.ip_type = AMDGPU_HW_IP_COMPUTE; 3843c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher fence_status.ring = instance; 385926c80568691e04abdfcd21b6e9be61331e95b03Ken Wang fence_status.fence = ibs_request.seq_no; 3863c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 387f91b56dc8c604ec1c6f092d69550266d20dc9764Jammy Zhou r = amdgpu_cs_query_fence_status(&fence_status, 388f91b56dc8c604ec1c6f092d69550266d20dc9764Jammy Zhou AMDGPU_TIMEOUT_INFINITE, 389f91b56dc8c604ec1c6f092d69550266d20dc9764Jammy Zhou 0, &expired); 3903c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_EQUAL(r, 0); 3911041cfdc38692721364557ce61d7abe71a1a9cbfJammy Zhou 39276af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák r = amdgpu_bo_list_destroy(bo_list); 39376af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák CU_ASSERT_EQUAL(r, 0); 39476af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák 3958aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou r = amdgpu_bo_unmap_and_free(ib_result_handle, va_handle, 3968aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou ib_result_mc_address, 4096); 3971041cfdc38692721364557ce61d7abe71a1a9cbfJammy Zhou CU_ASSERT_EQUAL(r, 0); 3983c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher } 3993c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 4009c2afffedb773da27fd7506b31fc2164f329d3a8Christian König r = amdgpu_cs_ctx_free(context_handle); 4013c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_EQUAL(r, 0); 4023c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher} 4033c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 4043c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher/* 4053c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher * caller need create/release: 4063c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher * pm4_src, resources, ib_info, and ibs_request 4073c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher * submit command stream described in ibs_request and wait for this IB accomplished 4083c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher */ 4093c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucherstatic void amdgpu_sdma_test_exec_cs(amdgpu_context_handle context_handle, 4103c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher int instance, int pm4_dw, uint32_t *pm4_src, 4113c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher int res_cnt, amdgpu_bo_handle *resources, 4123c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher struct amdgpu_cs_ib_info *ib_info, 4133c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher struct amdgpu_cs_request *ibs_request) 4143c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher{ 41576af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák int r; 4163c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher uint32_t expired; 4173c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher uint32_t *ring_ptr; 418646f5411cf36413c903eb6db48b5e7febd893ec5Marek Olšák amdgpu_bo_handle ib_result_handle; 419646f5411cf36413c903eb6db48b5e7febd893ec5Marek Olšák void *ib_result_cpu; 420646f5411cf36413c903eb6db48b5e7febd893ec5Marek Olšák uint64_t ib_result_mc_address; 4215463d2e83a450a0428f6c46561c5e2a54a229589Christian König struct amdgpu_cs_fence fence_status = {0}; 42276af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák amdgpu_bo_handle *all_res = alloca(sizeof(resources[0]) * (res_cnt + 1)); 4238aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou amdgpu_va_handle va_handle; 4243c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 4253c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher /* prepare CS */ 4263c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_NOT_EQUAL(pm4_src, NULL); 4273c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_NOT_EQUAL(resources, NULL); 4283c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_NOT_EQUAL(ib_info, NULL); 4293c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_NOT_EQUAL(ibs_request, NULL); 4303c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_TRUE(pm4_dw <= 1024); 4313c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 4323c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher /* allocate IB */ 433646f5411cf36413c903eb6db48b5e7febd893ec5Marek Olšák r = amdgpu_bo_alloc_and_map(device_handle, 4096, 4096, 434646f5411cf36413c903eb6db48b5e7febd893ec5Marek Olšák AMDGPU_GEM_DOMAIN_GTT, 0, 435646f5411cf36413c903eb6db48b5e7febd893ec5Marek Olšák &ib_result_handle, &ib_result_cpu, 4368aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou &ib_result_mc_address, &va_handle); 4373c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_EQUAL(r, 0); 4383c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 4393c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher /* copy PM4 packet to ring from caller */ 440646f5411cf36413c903eb6db48b5e7febd893ec5Marek Olšák ring_ptr = ib_result_cpu; 4413c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher memcpy(ring_ptr, pm4_src, pm4_dw * sizeof(*pm4_src)); 4423c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 44376af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák ib_info->ib_mc_address = ib_result_mc_address; 4443c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher ib_info->size = pm4_dw; 4453c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 4463c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher ibs_request->ip_type = AMDGPU_HW_IP_DMA; 4473c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher ibs_request->ring = instance; 4483c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher ibs_request->number_of_ibs = 1; 4493c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher ibs_request->ibs = ib_info; 450926c80568691e04abdfcd21b6e9be61331e95b03Ken Wang ibs_request->fence_info.handle = NULL; 4513c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 45276af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák memcpy(all_res, resources, sizeof(resources[0]) * res_cnt); 45376af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák all_res[res_cnt] = ib_result_handle; 45476af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák 45576af5c249fa438d8466b7e7dbda318da8f829eacMarek Olšák r = amdgpu_bo_list_create(device_handle, res_cnt+1, all_res, 4566dc2eaf2cc8428d11498a57bbe72cdf0df4a3306Christian König NULL, &ibs_request->resources); 4576dc2eaf2cc8428d11498a57bbe72cdf0df4a3306Christian König CU_ASSERT_EQUAL(r, 0); 4583c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 4593c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_NOT_EQUAL(ibs_request, NULL); 4603c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 4613c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher /* submit CS */ 462926c80568691e04abdfcd21b6e9be61331e95b03Ken Wang r = amdgpu_cs_submit(context_handle, 0, ibs_request, 1); 4633c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_EQUAL(r, 0); 4643c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 4656dc2eaf2cc8428d11498a57bbe72cdf0df4a3306Christian König r = amdgpu_bo_list_destroy(ibs_request->resources); 4666dc2eaf2cc8428d11498a57bbe72cdf0df4a3306Christian König CU_ASSERT_EQUAL(r, 0); 4676dc2eaf2cc8428d11498a57bbe72cdf0df4a3306Christian König 4683c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher fence_status.ip_type = AMDGPU_HW_IP_DMA; 4693c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher fence_status.ring = ibs_request->ring; 4703c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher fence_status.context = context_handle; 471926c80568691e04abdfcd21b6e9be61331e95b03Ken Wang fence_status.fence = ibs_request->seq_no; 4723c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 4733c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher /* wait for IB accomplished */ 474f91b56dc8c604ec1c6f092d69550266d20dc9764Jammy Zhou r = amdgpu_cs_query_fence_status(&fence_status, 475f91b56dc8c604ec1c6f092d69550266d20dc9764Jammy Zhou AMDGPU_TIMEOUT_INFINITE, 476f91b56dc8c604ec1c6f092d69550266d20dc9764Jammy Zhou 0, &expired); 4773c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_EQUAL(r, 0); 4783c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_EQUAL(expired, true); 4791041cfdc38692721364557ce61d7abe71a1a9cbfJammy Zhou 4808aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou r = amdgpu_bo_unmap_and_free(ib_result_handle, va_handle, 4818aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou ib_result_mc_address, 4096); 4821041cfdc38692721364557ce61d7abe71a1a9cbfJammy Zhou CU_ASSERT_EQUAL(r, 0); 4833c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher} 4843c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 4853c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucherstatic void amdgpu_command_submission_sdma_write_linear(void) 4863c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher{ 4873c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher const int sdma_write_length = 128; 4883c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher const int pm4_dw = 256; 4893c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher amdgpu_context_handle context_handle; 4903c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher amdgpu_bo_handle bo; 4913c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher amdgpu_bo_handle *resources; 4923c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher uint32_t *pm4; 4933c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher struct amdgpu_cs_ib_info *ib_info; 4943c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher struct amdgpu_cs_request *ibs_request; 4953c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher uint64_t bo_mc; 4963c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher volatile uint32_t *bo_cpu; 4973c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher int i, j, r, loop; 498a4c832117940880c28eec15bfae8040f2a93a733Jammy Zhou uint64_t gtt_flags[2] = {0, AMDGPU_GEM_CREATE_CPU_GTT_USWC}; 4998aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou amdgpu_va_handle va_handle; 5003c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 5013c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher pm4 = calloc(pm4_dw, sizeof(*pm4)); 5023c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_NOT_EQUAL(pm4, NULL); 5033c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 5043c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher ib_info = calloc(1, sizeof(*ib_info)); 5053c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_NOT_EQUAL(ib_info, NULL); 5063c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 5073c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher ibs_request = calloc(1, sizeof(*ibs_request)); 5083c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_NOT_EQUAL(ibs_request, NULL); 5093c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 5103c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher r = amdgpu_cs_ctx_create(device_handle, &context_handle); 5113c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_EQUAL(r, 0); 5123c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 5133c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher /* prepare resource */ 5143c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher resources = calloc(1, sizeof(amdgpu_bo_handle)); 5153c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_NOT_EQUAL(resources, NULL); 5163c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 5173c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher loop = 0; 518a4c832117940880c28eec15bfae8040f2a93a733Jammy Zhou while(loop < 2) { 5193c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher /* allocate UC bo for sDMA use */ 5208aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou r = amdgpu_bo_alloc_and_map(device_handle, 5218aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou sdma_write_length * sizeof(uint32_t), 5228aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou 4096, AMDGPU_GEM_DOMAIN_GTT, 523d9b282593e74ccbbb3a605dd72367a2262f39d12Michel Dänzer gtt_flags[loop], &bo, (void**)&bo_cpu, 5248aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou &bo_mc, &va_handle); 5258aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou CU_ASSERT_EQUAL(r, 0); 5263c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 5273c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher /* clear bo */ 5283c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher memset((void*)bo_cpu, 0, sdma_write_length * sizeof(uint32_t)); 5293c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 5303c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 5313c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher resources[0] = bo; 5323c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 5333c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher /* fullfill PM4: test DMA write-linear */ 5343c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher i = j = 0; 5353c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher pm4[i++] = SDMA_PACKET(SDMA_OPCODE_WRITE, 5363c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher SDMA_WRITE_SUB_OPCODE_LINEAR, 0); 5373c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher pm4[i++] = 0xffffffff & bo_mc; 5383c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher pm4[i++] = (0xffffffff00000000 & bo_mc) >> 32; 5393c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher pm4[i++] = sdma_write_length; 5403c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher while(j++ < sdma_write_length) 5413c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher pm4[i++] = 0xdeadbeaf; 5423c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 5433c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher amdgpu_sdma_test_exec_cs(context_handle, 0, 5443c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher i, pm4, 5453c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 1, resources, 5463c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher ib_info, ibs_request); 5473c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 5483c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher /* verify if SDMA test result meets with expected */ 5493c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher i = 0; 5503c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher while(i < sdma_write_length) { 5513c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_EQUAL(bo_cpu[i++], 0xdeadbeaf); 5523c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher } 5538aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou 5548aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou r = amdgpu_bo_unmap_and_free(bo, va_handle, bo_mc, 5558aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou sdma_write_length * sizeof(uint32_t)); 5568aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou CU_ASSERT_EQUAL(r, 0); 5573c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher loop++; 5583c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher } 5593c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher /* clean resources */ 5603c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher free(resources); 5613c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher free(ibs_request); 5623c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher free(ib_info); 5633c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher free(pm4); 5643c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 5653c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher /* end of test */ 5669c2afffedb773da27fd7506b31fc2164f329d3a8Christian König r = amdgpu_cs_ctx_free(context_handle); 5673c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_EQUAL(r, 0); 5683c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher} 5693c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 5703c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucherstatic void amdgpu_command_submission_sdma_const_fill(void) 5713c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher{ 5723c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher const int sdma_write_length = 1024 * 1024; 5733c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher const int pm4_dw = 256; 5743c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher amdgpu_context_handle context_handle; 5753c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher amdgpu_bo_handle bo; 5763c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher amdgpu_bo_handle *resources; 5773c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher uint32_t *pm4; 5783c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher struct amdgpu_cs_ib_info *ib_info; 5793c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher struct amdgpu_cs_request *ibs_request; 5803c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher uint64_t bo_mc; 5813c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher volatile uint32_t *bo_cpu; 5823c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher int i, j, r, loop; 583a4c832117940880c28eec15bfae8040f2a93a733Jammy Zhou uint64_t gtt_flags[2] = {0, AMDGPU_GEM_CREATE_CPU_GTT_USWC}; 5848aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou amdgpu_va_handle va_handle; 5853c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 5863c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher pm4 = calloc(pm4_dw, sizeof(*pm4)); 5873c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_NOT_EQUAL(pm4, NULL); 5883c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 5893c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher ib_info = calloc(1, sizeof(*ib_info)); 5903c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_NOT_EQUAL(ib_info, NULL); 5913c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 5923c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher ibs_request = calloc(1, sizeof(*ibs_request)); 5933c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_NOT_EQUAL(ibs_request, NULL); 5943c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 5953c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher r = amdgpu_cs_ctx_create(device_handle, &context_handle); 5963c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_EQUAL(r, 0); 5973c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 5983c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher /* prepare resource */ 5993c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher resources = calloc(1, sizeof(amdgpu_bo_handle)); 6003c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_NOT_EQUAL(resources, NULL); 6013c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 6023c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher loop = 0; 603a4c832117940880c28eec15bfae8040f2a93a733Jammy Zhou while(loop < 2) { 6043c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher /* allocate UC bo for sDMA use */ 6058aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou r = amdgpu_bo_alloc_and_map(device_handle, 6068aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou sdma_write_length, 4096, 6078aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou AMDGPU_GEM_DOMAIN_GTT, 608d9b282593e74ccbbb3a605dd72367a2262f39d12Michel Dänzer gtt_flags[loop], &bo, (void**)&bo_cpu, 6098aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou &bo_mc, &va_handle); 6108aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou CU_ASSERT_EQUAL(r, 0); 6113c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 6123c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher /* clear bo */ 6133c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher memset((void*)bo_cpu, 0, sdma_write_length); 6143c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 6153c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher resources[0] = bo; 6163c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 6173c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher /* fullfill PM4: test DMA const fill */ 6183c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher i = j = 0; 6193c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher pm4[i++] = SDMA_PACKET(SDMA_OPCODE_CONSTANT_FILL, 0, 6203c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher SDMA_CONSTANT_FILL_EXTRA_SIZE(2)); 6213c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher pm4[i++] = 0xffffffff & bo_mc; 6223c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher pm4[i++] = (0xffffffff00000000 & bo_mc) >> 32; 6233c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher pm4[i++] = 0xdeadbeaf; 6243c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher pm4[i++] = sdma_write_length; 6253c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 6263c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher amdgpu_sdma_test_exec_cs(context_handle, 0, 6273c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher i, pm4, 6283c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 1, resources, 6293c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher ib_info, ibs_request); 6303c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 6313c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher /* verify if SDMA test result meets with expected */ 6323c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher i = 0; 6333c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher while(i < (sdma_write_length / 4)) { 6343c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_EQUAL(bo_cpu[i++], 0xdeadbeaf); 6353c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher } 6368aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou 6378aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou r = amdgpu_bo_unmap_and_free(bo, va_handle, bo_mc, 6388aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou sdma_write_length); 6398aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou CU_ASSERT_EQUAL(r, 0); 6403c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher loop++; 6413c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher } 6423c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher /* clean resources */ 6433c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher free(resources); 6443c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher free(ibs_request); 6453c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher free(ib_info); 6463c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher free(pm4); 6473c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 6483c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher /* end of test */ 6499c2afffedb773da27fd7506b31fc2164f329d3a8Christian König r = amdgpu_cs_ctx_free(context_handle); 6503c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_EQUAL(r, 0); 6513c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher} 6523c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 6533c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucherstatic void amdgpu_command_submission_sdma_copy_linear(void) 6543c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher{ 6553c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher const int sdma_write_length = 1024; 6563c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher const int pm4_dw = 256; 6573c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher amdgpu_context_handle context_handle; 6583c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher amdgpu_bo_handle bo1, bo2; 6593c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher amdgpu_bo_handle *resources; 6603c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher uint32_t *pm4; 6613c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher struct amdgpu_cs_ib_info *ib_info; 6623c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher struct amdgpu_cs_request *ibs_request; 6633c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher uint64_t bo1_mc, bo2_mc; 6643c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher volatile unsigned char *bo1_cpu, *bo2_cpu; 6653c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher int i, j, r, loop1, loop2; 666a4c832117940880c28eec15bfae8040f2a93a733Jammy Zhou uint64_t gtt_flags[2] = {0, AMDGPU_GEM_CREATE_CPU_GTT_USWC}; 6678aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou amdgpu_va_handle bo1_va_handle, bo2_va_handle; 6683c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 6693c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher pm4 = calloc(pm4_dw, sizeof(*pm4)); 6703c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_NOT_EQUAL(pm4, NULL); 6713c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 6723c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher ib_info = calloc(1, sizeof(*ib_info)); 6733c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_NOT_EQUAL(ib_info, NULL); 6743c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 6753c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher ibs_request = calloc(1, sizeof(*ibs_request)); 6763c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_NOT_EQUAL(ibs_request, NULL); 6773c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 6783c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher r = amdgpu_cs_ctx_create(device_handle, &context_handle); 6793c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_EQUAL(r, 0); 6803c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 6813c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher /* prepare resource */ 6823c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher resources = calloc(2, sizeof(amdgpu_bo_handle)); 6833c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_NOT_EQUAL(resources, NULL); 6843c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 6853c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher loop1 = loop2 = 0; 6863c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher /* run 9 circle to test all mapping combination */ 687a4c832117940880c28eec15bfae8040f2a93a733Jammy Zhou while(loop1 < 2) { 688a4c832117940880c28eec15bfae8040f2a93a733Jammy Zhou while(loop2 < 2) { 6893c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher /* allocate UC bo1for sDMA use */ 6908aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou r = amdgpu_bo_alloc_and_map(device_handle, 6918aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou sdma_write_length, 4096, 6928aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou AMDGPU_GEM_DOMAIN_GTT, 693d9b282593e74ccbbb3a605dd72367a2262f39d12Michel Dänzer gtt_flags[loop1], &bo1, 694d9b282593e74ccbbb3a605dd72367a2262f39d12Michel Dänzer (void**)&bo1_cpu, &bo1_mc, 695d9b282593e74ccbbb3a605dd72367a2262f39d12Michel Dänzer &bo1_va_handle); 6968aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou CU_ASSERT_EQUAL(r, 0); 6973c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 6983c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher /* set bo1 */ 6993c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher memset((void*)bo1_cpu, 0xaa, sdma_write_length); 7003c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 7013c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher /* allocate UC bo2 for sDMA use */ 7028aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou r = amdgpu_bo_alloc_and_map(device_handle, 7038aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou sdma_write_length, 4096, 7048aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou AMDGPU_GEM_DOMAIN_GTT, 705d9b282593e74ccbbb3a605dd72367a2262f39d12Michel Dänzer gtt_flags[loop2], &bo2, 706d9b282593e74ccbbb3a605dd72367a2262f39d12Michel Dänzer (void**)&bo2_cpu, &bo2_mc, 707d9b282593e74ccbbb3a605dd72367a2262f39d12Michel Dänzer &bo2_va_handle); 7088aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou CU_ASSERT_EQUAL(r, 0); 7093c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 7103c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher /* clear bo2 */ 7113c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher memset((void*)bo2_cpu, 0, sdma_write_length); 7123c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 7133c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher resources[0] = bo1; 7143c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher resources[1] = bo2; 7153c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 7163c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher /* fullfill PM4: test DMA copy linear */ 7173c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher i = j = 0; 7183c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher pm4[i++] = SDMA_PACKET(SDMA_OPCODE_COPY, SDMA_COPY_SUB_OPCODE_LINEAR, 0); 7193c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher pm4[i++] = sdma_write_length; 7203c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher pm4[i++] = 0; 7213c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher pm4[i++] = 0xffffffff & bo1_mc; 7223c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher pm4[i++] = (0xffffffff00000000 & bo1_mc) >> 32; 7233c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher pm4[i++] = 0xffffffff & bo2_mc; 7243c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher pm4[i++] = (0xffffffff00000000 & bo2_mc) >> 32; 7253c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 7263c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 7273c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher amdgpu_sdma_test_exec_cs(context_handle, 0, 7283c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher i, pm4, 7293c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 2, resources, 7303c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher ib_info, ibs_request); 7313c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 7323c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher /* verify if SDMA test result meets with expected */ 7333c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher i = 0; 7343c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher while(i < sdma_write_length) { 7353c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_EQUAL(bo2_cpu[i++], 0xaa); 7363c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher } 7378aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou r = amdgpu_bo_unmap_and_free(bo1, bo1_va_handle, bo1_mc, 7388aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou sdma_write_length); 7398aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou CU_ASSERT_EQUAL(r, 0); 7408aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou r = amdgpu_bo_unmap_and_free(bo2, bo2_va_handle, bo2_mc, 7418aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou sdma_write_length); 7428aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou CU_ASSERT_EQUAL(r, 0); 7433c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher loop2++; 7443c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher } 7453c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher loop1++; 7463c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher } 7473c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher /* clean resources */ 7483c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher free(resources); 7493c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher free(ibs_request); 7503c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher free(ib_info); 7513c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher free(pm4); 7523c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 7533c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher /* end of test */ 7549c2afffedb773da27fd7506b31fc2164f329d3a8Christian König r = amdgpu_cs_ctx_free(context_handle); 7553c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_EQUAL(r, 0); 7563c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher} 7573c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 7583c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucherstatic void amdgpu_command_submission_sdma(void) 7593c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher{ 7603c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher amdgpu_command_submission_sdma_write_linear(); 7613c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher amdgpu_command_submission_sdma_const_fill(); 7623c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher amdgpu_command_submission_sdma_copy_linear(); 7633c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher} 7643c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 7653c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucherstatic void amdgpu_userptr_test(void) 7663c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher{ 7673c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher int i, r, j; 7683c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher uint32_t *pm4 = NULL; 7693c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher uint64_t bo_mc; 7703c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher void *ptr = NULL; 7713c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher int pm4_dw = 256; 7723c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher int sdma_write_length = 4; 7733c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher amdgpu_bo_handle handle; 7743c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher amdgpu_context_handle context_handle; 7753c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher struct amdgpu_cs_ib_info *ib_info; 7763c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher struct amdgpu_cs_request *ibs_request; 7778aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou amdgpu_bo_handle buf_handle; 7788aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou amdgpu_va_handle va_handle; 7793c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 7803c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher pm4 = calloc(pm4_dw, sizeof(*pm4)); 7813c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_NOT_EQUAL(pm4, NULL); 7823c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 7833c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher ib_info = calloc(1, sizeof(*ib_info)); 7843c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_NOT_EQUAL(ib_info, NULL); 7853c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 7863c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher ibs_request = calloc(1, sizeof(*ibs_request)); 7873c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_NOT_EQUAL(ibs_request, NULL); 7883c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 7893c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher r = amdgpu_cs_ctx_create(device_handle, &context_handle); 7903c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_EQUAL(r, 0); 7913c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 7923c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher posix_memalign(&ptr, sysconf(_SC_PAGE_SIZE), BUFFER_SIZE); 7933c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_NOT_EQUAL(ptr, NULL); 7943c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher memset(ptr, 0, BUFFER_SIZE); 7953c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 7963c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher r = amdgpu_create_bo_from_user_mem(device_handle, 7978aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou ptr, BUFFER_SIZE, &buf_handle); 7988aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou CU_ASSERT_EQUAL(r, 0); 7998aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou 8008aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou r = amdgpu_va_range_alloc(device_handle, 8018aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou amdgpu_gpu_va_range_general, 8028aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou BUFFER_SIZE, 1, 0, &bo_mc, 8038aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou &va_handle, 0); 8048aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou CU_ASSERT_EQUAL(r, 0); 8058aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou 8068aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou r = amdgpu_bo_va_op(buf_handle, 0, BUFFER_SIZE, bo_mc, 0, AMDGPU_VA_OP_MAP); 8073c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_EQUAL(r, 0); 8088aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou 8098aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou handle = buf_handle; 8103c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 8113c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher j = i = 0; 8123c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher pm4[i++] = SDMA_PACKET(SDMA_OPCODE_WRITE, 8133c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher SDMA_WRITE_SUB_OPCODE_LINEAR, 0); 8143c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher pm4[i++] = 0xffffffff & bo_mc; 8153c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher pm4[i++] = (0xffffffff00000000 & bo_mc) >> 32; 8163c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher pm4[i++] = sdma_write_length; 8173c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 8183c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher while (j++ < sdma_write_length) 8193c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher pm4[i++] = 0xdeadbeaf; 8203c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 8213c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher amdgpu_sdma_test_exec_cs(context_handle, 0, 8223c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher i, pm4, 8233c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 1, &handle, 8243c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher ib_info, ibs_request); 8253c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher i = 0; 8263c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher while (i < sdma_write_length) { 8273c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_EQUAL(((int*)ptr)[i++], 0xdeadbeaf); 8283c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher } 8293c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher free(ibs_request); 8303c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher free(ib_info); 8313c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher free(pm4); 8328aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou 8338aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou r = amdgpu_bo_va_op(buf_handle, 0, BUFFER_SIZE, bo_mc, 0, AMDGPU_VA_OP_UNMAP); 8348aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou CU_ASSERT_EQUAL(r, 0); 8358aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou r = amdgpu_va_range_free(va_handle); 8368aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou CU_ASSERT_EQUAL(r, 0); 8378aeffcc1cf3360fddd97f4a6b6f7300f401142aeJammy Zhou r = amdgpu_bo_free(buf_handle); 8383c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_EQUAL(r, 0); 8393c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher free(ptr); 8403c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher 8419c2afffedb773da27fd7506b31fc2164f329d3a8Christian König r = amdgpu_cs_ctx_free(context_handle); 8423c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher CU_ASSERT_EQUAL(r, 0); 8433c5fe78801dbadc82cc25f4a63a983fea15d938bAlex Deucher} 844