1d722e3fbSopenharmony_ci/* 2d722e3fbSopenharmony_ci * Copyright 2014 Advanced Micro Devices, Inc. 3d722e3fbSopenharmony_ci * 4d722e3fbSopenharmony_ci * Permission is hereby granted, free of charge, to any person obtaining a 5d722e3fbSopenharmony_ci * copy of this software and associated documentation files (the "Software"), 6d722e3fbSopenharmony_ci * to deal in the Software without restriction, including without limitation 7d722e3fbSopenharmony_ci * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8d722e3fbSopenharmony_ci * and/or sell copies of the Software, and to permit persons to whom the 9d722e3fbSopenharmony_ci * Software is furnished to do so, subject to the following conditions: 10d722e3fbSopenharmony_ci * 11d722e3fbSopenharmony_ci * The above copyright notice and this permission notice shall be included in 12d722e3fbSopenharmony_ci * all copies or substantial portions of the Software. 13d722e3fbSopenharmony_ci * 14d722e3fbSopenharmony_ci * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15d722e3fbSopenharmony_ci * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16d722e3fbSopenharmony_ci * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17d722e3fbSopenharmony_ci * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 18d722e3fbSopenharmony_ci * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 19d722e3fbSopenharmony_ci * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 20d722e3fbSopenharmony_ci * OTHER DEALINGS IN THE SOFTWARE. 21d722e3fbSopenharmony_ci * 22d722e3fbSopenharmony_ci*/ 23d722e3fbSopenharmony_ci 24d722e3fbSopenharmony_ci#ifndef _AMDGPU_TEST_H_ 25d722e3fbSopenharmony_ci#define _AMDGPU_TEST_H_ 26d722e3fbSopenharmony_ci 27d722e3fbSopenharmony_ci#include "amdgpu.h" 28d722e3fbSopenharmony_ci#include "amdgpu_drm.h" 29d722e3fbSopenharmony_ci 30d722e3fbSopenharmony_ci/** 31d722e3fbSopenharmony_ci * Define max. number of card in system which we are able to handle 32d722e3fbSopenharmony_ci */ 33d722e3fbSopenharmony_ci#define MAX_CARDS_SUPPORTED 128 34d722e3fbSopenharmony_ci 35d722e3fbSopenharmony_ci/* Forward reference for array to keep "drm" handles */ 36d722e3fbSopenharmony_ciextern int drm_amdgpu[MAX_CARDS_SUPPORTED]; 37d722e3fbSopenharmony_ci 38d722e3fbSopenharmony_ci/* Global variables */ 39d722e3fbSopenharmony_ciextern int open_render_node; 40d722e3fbSopenharmony_ci 41d722e3fbSopenharmony_ci/************************* Basic test suite ********************************/ 42d722e3fbSopenharmony_ci 43d722e3fbSopenharmony_ci/* 44d722e3fbSopenharmony_ci * Define basic test suite to serve as the starting point for future testing 45d722e3fbSopenharmony_ci*/ 46d722e3fbSopenharmony_ci 47d722e3fbSopenharmony_ci/** 48d722e3fbSopenharmony_ci * Initialize basic test suite 49d722e3fbSopenharmony_ci */ 50d722e3fbSopenharmony_ciint suite_basic_tests_init(); 51d722e3fbSopenharmony_ci 52d722e3fbSopenharmony_ci/** 53d722e3fbSopenharmony_ci * Deinitialize basic test suite 54d722e3fbSopenharmony_ci */ 55d722e3fbSopenharmony_ciint suite_basic_tests_clean(); 56d722e3fbSopenharmony_ci 57d722e3fbSopenharmony_ci/** 58d722e3fbSopenharmony_ci * Decide if the suite is enabled by default or not. 59d722e3fbSopenharmony_ci */ 60d722e3fbSopenharmony_ciCU_BOOL suite_basic_tests_enable(void); 61d722e3fbSopenharmony_ci 62d722e3fbSopenharmony_ci/** 63d722e3fbSopenharmony_ci * Tests in basic test suite 64d722e3fbSopenharmony_ci */ 65d722e3fbSopenharmony_ciextern CU_TestInfo basic_tests[]; 66d722e3fbSopenharmony_ci 67d722e3fbSopenharmony_ci/** 68d722e3fbSopenharmony_ci * Initialize bo test suite 69d722e3fbSopenharmony_ci */ 70d722e3fbSopenharmony_ciint suite_bo_tests_init(); 71d722e3fbSopenharmony_ci 72d722e3fbSopenharmony_ci/** 73d722e3fbSopenharmony_ci * Deinitialize bo test suite 74d722e3fbSopenharmony_ci */ 75d722e3fbSopenharmony_ciint suite_bo_tests_clean(); 76d722e3fbSopenharmony_ci 77d722e3fbSopenharmony_ci/** 78d722e3fbSopenharmony_ci * Tests in bo test suite 79d722e3fbSopenharmony_ci */ 80d722e3fbSopenharmony_ciextern CU_TestInfo bo_tests[]; 81d722e3fbSopenharmony_ci 82d722e3fbSopenharmony_ci/** 83d722e3fbSopenharmony_ci * Initialize cs test suite 84d722e3fbSopenharmony_ci */ 85d722e3fbSopenharmony_ciint suite_cs_tests_init(); 86d722e3fbSopenharmony_ci 87d722e3fbSopenharmony_ci/** 88d722e3fbSopenharmony_ci * Deinitialize cs test suite 89d722e3fbSopenharmony_ci */ 90d722e3fbSopenharmony_ciint suite_cs_tests_clean(); 91d722e3fbSopenharmony_ci 92d722e3fbSopenharmony_ci/** 93d722e3fbSopenharmony_ci * Decide if the suite is enabled by default or not. 94d722e3fbSopenharmony_ci */ 95d722e3fbSopenharmony_ciCU_BOOL suite_cs_tests_enable(void); 96d722e3fbSopenharmony_ci 97d722e3fbSopenharmony_ci/** 98d722e3fbSopenharmony_ci * Tests in cs test suite 99d722e3fbSopenharmony_ci */ 100d722e3fbSopenharmony_ciextern CU_TestInfo cs_tests[]; 101d722e3fbSopenharmony_ci 102d722e3fbSopenharmony_ci/** 103d722e3fbSopenharmony_ci * Initialize vce test suite 104d722e3fbSopenharmony_ci */ 105d722e3fbSopenharmony_ciint suite_vce_tests_init(); 106d722e3fbSopenharmony_ci 107d722e3fbSopenharmony_ci/** 108d722e3fbSopenharmony_ci * Deinitialize vce test suite 109d722e3fbSopenharmony_ci */ 110d722e3fbSopenharmony_ciint suite_vce_tests_clean(); 111d722e3fbSopenharmony_ci 112d722e3fbSopenharmony_ci/** 113d722e3fbSopenharmony_ci * Decide if the suite is enabled by default or not. 114d722e3fbSopenharmony_ci */ 115d722e3fbSopenharmony_ciCU_BOOL suite_vce_tests_enable(void); 116d722e3fbSopenharmony_ci 117d722e3fbSopenharmony_ci/** 118d722e3fbSopenharmony_ci * Tests in vce test suite 119d722e3fbSopenharmony_ci */ 120d722e3fbSopenharmony_ciextern CU_TestInfo vce_tests[]; 121d722e3fbSopenharmony_ci 122d722e3fbSopenharmony_ci/** 123d722e3fbSopenharmony_ci+ * Initialize vcn test suite 124d722e3fbSopenharmony_ci+ */ 125d722e3fbSopenharmony_ciint suite_vcn_tests_init(); 126d722e3fbSopenharmony_ci 127d722e3fbSopenharmony_ci/** 128d722e3fbSopenharmony_ci+ * Deinitialize vcn test suite 129d722e3fbSopenharmony_ci+ */ 130d722e3fbSopenharmony_ciint suite_vcn_tests_clean(); 131d722e3fbSopenharmony_ci 132d722e3fbSopenharmony_ci/** 133d722e3fbSopenharmony_ci * Decide if the suite is enabled by default or not. 134d722e3fbSopenharmony_ci */ 135d722e3fbSopenharmony_ciCU_BOOL suite_vcn_tests_enable(void); 136d722e3fbSopenharmony_ci 137d722e3fbSopenharmony_ci/** 138d722e3fbSopenharmony_ci+ * Tests in vcn test suite 139d722e3fbSopenharmony_ci+ */ 140d722e3fbSopenharmony_ciextern CU_TestInfo vcn_tests[]; 141d722e3fbSopenharmony_ci 142d722e3fbSopenharmony_ci/** 143d722e3fbSopenharmony_ci+ * Initialize jpeg test suite 144d722e3fbSopenharmony_ci+ */ 145d722e3fbSopenharmony_ciint suite_jpeg_tests_init(); 146d722e3fbSopenharmony_ci 147d722e3fbSopenharmony_ci/** 148d722e3fbSopenharmony_ci+ * Deinitialize jpeg test suite 149d722e3fbSopenharmony_ci+ */ 150d722e3fbSopenharmony_ciint suite_jpeg_tests_clean(); 151d722e3fbSopenharmony_ci 152d722e3fbSopenharmony_ci/** 153d722e3fbSopenharmony_ci * Decide if the suite is enabled by default or not. 154d722e3fbSopenharmony_ci */ 155d722e3fbSopenharmony_ciCU_BOOL suite_jpeg_tests_enable(void); 156d722e3fbSopenharmony_ci 157d722e3fbSopenharmony_ci/** 158d722e3fbSopenharmony_ci+ * Tests in vcn test suite 159d722e3fbSopenharmony_ci+ */ 160d722e3fbSopenharmony_ciextern CU_TestInfo jpeg_tests[]; 161d722e3fbSopenharmony_ci 162d722e3fbSopenharmony_ci/** 163d722e3fbSopenharmony_ci * Initialize uvd enc test suite 164d722e3fbSopenharmony_ci */ 165d722e3fbSopenharmony_ciint suite_uvd_enc_tests_init(); 166d722e3fbSopenharmony_ci 167d722e3fbSopenharmony_ci/** 168d722e3fbSopenharmony_ci * Deinitialize uvd enc test suite 169d722e3fbSopenharmony_ci */ 170d722e3fbSopenharmony_ciint suite_uvd_enc_tests_clean(); 171d722e3fbSopenharmony_ci 172d722e3fbSopenharmony_ci/** 173d722e3fbSopenharmony_ci * Decide if the suite is enabled by default or not. 174d722e3fbSopenharmony_ci */ 175d722e3fbSopenharmony_ciCU_BOOL suite_uvd_enc_tests_enable(void); 176d722e3fbSopenharmony_ci 177d722e3fbSopenharmony_ci/** 178d722e3fbSopenharmony_ci * Tests in uvd enc test suite 179d722e3fbSopenharmony_ci */ 180d722e3fbSopenharmony_ciextern CU_TestInfo uvd_enc_tests[]; 181d722e3fbSopenharmony_ci 182d722e3fbSopenharmony_ci/** 183d722e3fbSopenharmony_ci * Initialize deadlock test suite 184d722e3fbSopenharmony_ci */ 185d722e3fbSopenharmony_ciint suite_deadlock_tests_init(); 186d722e3fbSopenharmony_ci 187d722e3fbSopenharmony_ci/** 188d722e3fbSopenharmony_ci * Deinitialize deadlock test suite 189d722e3fbSopenharmony_ci */ 190d722e3fbSopenharmony_ciint suite_deadlock_tests_clean(); 191d722e3fbSopenharmony_ci 192d722e3fbSopenharmony_ci/** 193d722e3fbSopenharmony_ci * Decide if the suite is enabled by default or not. 194d722e3fbSopenharmony_ci */ 195d722e3fbSopenharmony_ciCU_BOOL suite_deadlock_tests_enable(void); 196d722e3fbSopenharmony_ci 197d722e3fbSopenharmony_ci/** 198d722e3fbSopenharmony_ci * Tests in uvd enc test suite 199d722e3fbSopenharmony_ci */ 200d722e3fbSopenharmony_ciextern CU_TestInfo deadlock_tests[]; 201d722e3fbSopenharmony_ci 202d722e3fbSopenharmony_ci/** 203d722e3fbSopenharmony_ci * Initialize vm test suite 204d722e3fbSopenharmony_ci */ 205d722e3fbSopenharmony_ciint suite_vm_tests_init(); 206d722e3fbSopenharmony_ci 207d722e3fbSopenharmony_ci/** 208d722e3fbSopenharmony_ci * Deinitialize deadlock test suite 209d722e3fbSopenharmony_ci */ 210d722e3fbSopenharmony_ciint suite_vm_tests_clean(); 211d722e3fbSopenharmony_ci 212d722e3fbSopenharmony_ci/** 213d722e3fbSopenharmony_ci * Decide if the suite is enabled by default or not. 214d722e3fbSopenharmony_ci */ 215d722e3fbSopenharmony_ciCU_BOOL suite_vm_tests_enable(void); 216d722e3fbSopenharmony_ci 217d722e3fbSopenharmony_ci/** 218d722e3fbSopenharmony_ci * Tests in vm test suite 219d722e3fbSopenharmony_ci */ 220d722e3fbSopenharmony_ciextern CU_TestInfo vm_tests[]; 221d722e3fbSopenharmony_ci 222d722e3fbSopenharmony_ci 223d722e3fbSopenharmony_ci/** 224d722e3fbSopenharmony_ci * Initialize ras test suite 225d722e3fbSopenharmony_ci */ 226d722e3fbSopenharmony_ciint suite_ras_tests_init(); 227d722e3fbSopenharmony_ci 228d722e3fbSopenharmony_ci/** 229d722e3fbSopenharmony_ci * Deinitialize deadlock test suite 230d722e3fbSopenharmony_ci */ 231d722e3fbSopenharmony_ciint suite_ras_tests_clean(); 232d722e3fbSopenharmony_ci 233d722e3fbSopenharmony_ci/** 234d722e3fbSopenharmony_ci * Decide if the suite is enabled by default or not. 235d722e3fbSopenharmony_ci */ 236d722e3fbSopenharmony_ciCU_BOOL suite_ras_tests_enable(void); 237d722e3fbSopenharmony_ci 238d722e3fbSopenharmony_ci/** 239d722e3fbSopenharmony_ci * Tests in ras test suite 240d722e3fbSopenharmony_ci */ 241d722e3fbSopenharmony_ciextern CU_TestInfo ras_tests[]; 242d722e3fbSopenharmony_ci 243d722e3fbSopenharmony_ci 244d722e3fbSopenharmony_ci/** 245d722e3fbSopenharmony_ci * Initialize syncobj timeline test suite 246d722e3fbSopenharmony_ci */ 247d722e3fbSopenharmony_ciint suite_syncobj_timeline_tests_init(); 248d722e3fbSopenharmony_ci 249d722e3fbSopenharmony_ci/** 250d722e3fbSopenharmony_ci * Deinitialize syncobj timeline test suite 251d722e3fbSopenharmony_ci */ 252d722e3fbSopenharmony_ciint suite_syncobj_timeline_tests_clean(); 253d722e3fbSopenharmony_ci 254d722e3fbSopenharmony_ci/** 255d722e3fbSopenharmony_ci * Decide if the suite is enabled by default or not. 256d722e3fbSopenharmony_ci */ 257d722e3fbSopenharmony_ciCU_BOOL suite_syncobj_timeline_tests_enable(void); 258d722e3fbSopenharmony_ci 259d722e3fbSopenharmony_ci/** 260d722e3fbSopenharmony_ci * Tests in syncobj timeline test suite 261d722e3fbSopenharmony_ci */ 262d722e3fbSopenharmony_ciextern CU_TestInfo syncobj_timeline_tests[]; 263d722e3fbSopenharmony_ci 264d722e3fbSopenharmony_ci 265d722e3fbSopenharmony_ci/** 266d722e3fbSopenharmony_ci * Initialize cp dma test suite 267d722e3fbSopenharmony_ci */ 268d722e3fbSopenharmony_ciint suite_cp_dma_tests_init(); 269d722e3fbSopenharmony_ci 270d722e3fbSopenharmony_ci/** 271d722e3fbSopenharmony_ci * Deinitialize cp dma test suite 272d722e3fbSopenharmony_ci */ 273d722e3fbSopenharmony_ciint suite_cp_dma_tests_clean(); 274d722e3fbSopenharmony_ci 275d722e3fbSopenharmony_ci/** 276d722e3fbSopenharmony_ci * Decide if the suite is enabled by default or not. 277d722e3fbSopenharmony_ci */ 278d722e3fbSopenharmony_ciCU_BOOL suite_cp_dma_tests_enable(void); 279d722e3fbSopenharmony_ci 280d722e3fbSopenharmony_ci/** 281d722e3fbSopenharmony_ci * Tests in cp dma test suite 282d722e3fbSopenharmony_ci */ 283d722e3fbSopenharmony_ciextern CU_TestInfo cp_dma_tests[]; 284d722e3fbSopenharmony_ci 285d722e3fbSopenharmony_civoid amdgpu_dispatch_hang_helper(amdgpu_device_handle device_handle, uint32_t ip_type); 286d722e3fbSopenharmony_civoid amdgpu_dispatch_hang_slow_helper(amdgpu_device_handle device_handle, uint32_t ip_type); 287d722e3fbSopenharmony_civoid amdgpu_memcpy_draw_test(amdgpu_device_handle device_handle, uint32_t ring, 288d722e3fbSopenharmony_ci int version, int hang); 289d722e3fbSopenharmony_civoid amdgpu_memcpy_draw_hang_slow_test(amdgpu_device_handle device_handle, uint32_t ring, int version); 290d722e3fbSopenharmony_ci 291d722e3fbSopenharmony_ci/** 292d722e3fbSopenharmony_ci * Initialize security test suite 293d722e3fbSopenharmony_ci */ 294d722e3fbSopenharmony_ciint suite_security_tests_init(); 295d722e3fbSopenharmony_ci 296d722e3fbSopenharmony_ci/** 297d722e3fbSopenharmony_ci * Deinitialize security test suite 298d722e3fbSopenharmony_ci */ 299d722e3fbSopenharmony_ciint suite_security_tests_clean(); 300d722e3fbSopenharmony_ci 301d722e3fbSopenharmony_ci/** 302d722e3fbSopenharmony_ci * Decide if the suite is enabled by default or not. 303d722e3fbSopenharmony_ci */ 304d722e3fbSopenharmony_ciCU_BOOL suite_security_tests_enable(void); 305d722e3fbSopenharmony_ci 306d722e3fbSopenharmony_ci/** 307d722e3fbSopenharmony_ci * Tests in security test suite 308d722e3fbSopenharmony_ci */ 309d722e3fbSopenharmony_ciextern CU_TestInfo security_tests[]; 310d722e3fbSopenharmony_ci 311d722e3fbSopenharmony_ciextern void 312d722e3fbSopenharmony_ciamdgpu_command_submission_write_linear_helper_with_secure(amdgpu_device_handle 313d722e3fbSopenharmony_ci device, 314d722e3fbSopenharmony_ci unsigned ip_type, 315d722e3fbSopenharmony_ci bool secure); 316d722e3fbSopenharmony_ci 317d722e3fbSopenharmony_ci 318d722e3fbSopenharmony_ci 319d722e3fbSopenharmony_ci/** 320d722e3fbSopenharmony_ci * Initialize hotunplug test suite 321d722e3fbSopenharmony_ci */ 322d722e3fbSopenharmony_ciint suite_hotunplug_tests_init(); 323d722e3fbSopenharmony_ci 324d722e3fbSopenharmony_ci/** 325d722e3fbSopenharmony_ci * Deinitialize hotunplug test suite 326d722e3fbSopenharmony_ci */ 327d722e3fbSopenharmony_ciint suite_hotunplug_tests_clean(); 328d722e3fbSopenharmony_ci 329d722e3fbSopenharmony_ci/** 330d722e3fbSopenharmony_ci * Decide if the suite is enabled by default or not. 331d722e3fbSopenharmony_ci */ 332d722e3fbSopenharmony_ciCU_BOOL suite_hotunplug_tests_enable(void); 333d722e3fbSopenharmony_ci 334d722e3fbSopenharmony_ci/** 335d722e3fbSopenharmony_ci * Tests in uvd enc test suite 336d722e3fbSopenharmony_ci */ 337d722e3fbSopenharmony_ciextern CU_TestInfo hotunplug_tests[]; 338d722e3fbSopenharmony_ci 339d722e3fbSopenharmony_ci 340d722e3fbSopenharmony_ci/** 341d722e3fbSopenharmony_ci * Helper functions 342d722e3fbSopenharmony_ci */ 343d722e3fbSopenharmony_cistatic inline amdgpu_bo_handle gpu_mem_alloc( 344d722e3fbSopenharmony_ci amdgpu_device_handle device_handle, 345d722e3fbSopenharmony_ci uint64_t size, 346d722e3fbSopenharmony_ci uint64_t alignment, 347d722e3fbSopenharmony_ci uint32_t type, 348d722e3fbSopenharmony_ci uint64_t flags, 349d722e3fbSopenharmony_ci uint64_t *vmc_addr, 350d722e3fbSopenharmony_ci amdgpu_va_handle *va_handle) 351d722e3fbSopenharmony_ci{ 352d722e3fbSopenharmony_ci struct amdgpu_bo_alloc_request req = {0}; 353d722e3fbSopenharmony_ci amdgpu_bo_handle buf_handle = NULL; 354d722e3fbSopenharmony_ci int r; 355d722e3fbSopenharmony_ci 356d722e3fbSopenharmony_ci req.alloc_size = size; 357d722e3fbSopenharmony_ci req.phys_alignment = alignment; 358d722e3fbSopenharmony_ci req.preferred_heap = type; 359d722e3fbSopenharmony_ci req.flags = flags; 360d722e3fbSopenharmony_ci 361d722e3fbSopenharmony_ci r = amdgpu_bo_alloc(device_handle, &req, &buf_handle); 362d722e3fbSopenharmony_ci CU_ASSERT_EQUAL(r, 0); 363d722e3fbSopenharmony_ci if (r) 364d722e3fbSopenharmony_ci return NULL; 365d722e3fbSopenharmony_ci 366d722e3fbSopenharmony_ci if (vmc_addr && va_handle) { 367d722e3fbSopenharmony_ci r = amdgpu_va_range_alloc(device_handle, 368d722e3fbSopenharmony_ci amdgpu_gpu_va_range_general, 369d722e3fbSopenharmony_ci size, alignment, 0, vmc_addr, 370d722e3fbSopenharmony_ci va_handle, 0); 371d722e3fbSopenharmony_ci CU_ASSERT_EQUAL(r, 0); 372d722e3fbSopenharmony_ci if (r) 373d722e3fbSopenharmony_ci goto error_free_bo; 374d722e3fbSopenharmony_ci 375d722e3fbSopenharmony_ci r = amdgpu_bo_va_op(buf_handle, 0, size, *vmc_addr, 0, 376d722e3fbSopenharmony_ci AMDGPU_VA_OP_MAP); 377d722e3fbSopenharmony_ci CU_ASSERT_EQUAL(r, 0); 378d722e3fbSopenharmony_ci if (r) 379d722e3fbSopenharmony_ci goto error_free_va; 380d722e3fbSopenharmony_ci } 381d722e3fbSopenharmony_ci 382d722e3fbSopenharmony_ci return buf_handle; 383d722e3fbSopenharmony_ci 384d722e3fbSopenharmony_cierror_free_va: 385d722e3fbSopenharmony_ci r = amdgpu_va_range_free(*va_handle); 386d722e3fbSopenharmony_ci CU_ASSERT_EQUAL(r, 0); 387d722e3fbSopenharmony_ci 388d722e3fbSopenharmony_cierror_free_bo: 389d722e3fbSopenharmony_ci r = amdgpu_bo_free(buf_handle); 390d722e3fbSopenharmony_ci CU_ASSERT_EQUAL(r, 0); 391d722e3fbSopenharmony_ci 392d722e3fbSopenharmony_ci return NULL; 393d722e3fbSopenharmony_ci} 394d722e3fbSopenharmony_ci 395d722e3fbSopenharmony_cistatic inline int gpu_mem_free(amdgpu_bo_handle bo, 396d722e3fbSopenharmony_ci amdgpu_va_handle va_handle, 397d722e3fbSopenharmony_ci uint64_t vmc_addr, 398d722e3fbSopenharmony_ci uint64_t size) 399d722e3fbSopenharmony_ci{ 400d722e3fbSopenharmony_ci int r; 401d722e3fbSopenharmony_ci 402d722e3fbSopenharmony_ci if (!bo) 403d722e3fbSopenharmony_ci return 0; 404d722e3fbSopenharmony_ci 405d722e3fbSopenharmony_ci if (va_handle) { 406d722e3fbSopenharmony_ci r = amdgpu_bo_va_op(bo, 0, size, vmc_addr, 0, 407d722e3fbSopenharmony_ci AMDGPU_VA_OP_UNMAP); 408d722e3fbSopenharmony_ci CU_ASSERT_EQUAL(r, 0); 409d722e3fbSopenharmony_ci if (r) 410d722e3fbSopenharmony_ci return r; 411d722e3fbSopenharmony_ci 412d722e3fbSopenharmony_ci r = amdgpu_va_range_free(va_handle); 413d722e3fbSopenharmony_ci CU_ASSERT_EQUAL(r, 0); 414d722e3fbSopenharmony_ci if (r) 415d722e3fbSopenharmony_ci return r; 416d722e3fbSopenharmony_ci } 417d722e3fbSopenharmony_ci 418d722e3fbSopenharmony_ci r = amdgpu_bo_free(bo); 419d722e3fbSopenharmony_ci CU_ASSERT_EQUAL(r, 0); 420d722e3fbSopenharmony_ci 421d722e3fbSopenharmony_ci return r; 422d722e3fbSopenharmony_ci} 423d722e3fbSopenharmony_ci 424d722e3fbSopenharmony_cistatic inline int 425d722e3fbSopenharmony_ciamdgpu_bo_alloc_wrap(amdgpu_device_handle dev, unsigned size, 426d722e3fbSopenharmony_ci unsigned alignment, unsigned heap, uint64_t flags, 427d722e3fbSopenharmony_ci amdgpu_bo_handle *bo) 428d722e3fbSopenharmony_ci{ 429d722e3fbSopenharmony_ci struct amdgpu_bo_alloc_request request = {}; 430d722e3fbSopenharmony_ci amdgpu_bo_handle buf_handle; 431d722e3fbSopenharmony_ci int r; 432d722e3fbSopenharmony_ci 433d722e3fbSopenharmony_ci request.alloc_size = size; 434d722e3fbSopenharmony_ci request.phys_alignment = alignment; 435d722e3fbSopenharmony_ci request.preferred_heap = heap; 436d722e3fbSopenharmony_ci request.flags = flags; 437d722e3fbSopenharmony_ci 438d722e3fbSopenharmony_ci r = amdgpu_bo_alloc(dev, &request, &buf_handle); 439d722e3fbSopenharmony_ci if (r) 440d722e3fbSopenharmony_ci return r; 441d722e3fbSopenharmony_ci 442d722e3fbSopenharmony_ci *bo = buf_handle; 443d722e3fbSopenharmony_ci 444d722e3fbSopenharmony_ci return 0; 445d722e3fbSopenharmony_ci} 446d722e3fbSopenharmony_ci 447d722e3fbSopenharmony_ciint amdgpu_bo_alloc_and_map_raw(amdgpu_device_handle dev, unsigned size, 448d722e3fbSopenharmony_ci unsigned alignment, unsigned heap, uint64_t alloc_flags, 449d722e3fbSopenharmony_ci uint64_t mapping_flags, amdgpu_bo_handle *bo, void **cpu, 450d722e3fbSopenharmony_ci uint64_t *mc_address, 451d722e3fbSopenharmony_ci amdgpu_va_handle *va_handle); 452d722e3fbSopenharmony_ci 453d722e3fbSopenharmony_cistatic inline int 454d722e3fbSopenharmony_ciamdgpu_bo_alloc_and_map(amdgpu_device_handle dev, unsigned size, 455d722e3fbSopenharmony_ci unsigned alignment, unsigned heap, uint64_t alloc_flags, 456d722e3fbSopenharmony_ci amdgpu_bo_handle *bo, void **cpu, uint64_t *mc_address, 457d722e3fbSopenharmony_ci amdgpu_va_handle *va_handle) 458d722e3fbSopenharmony_ci{ 459d722e3fbSopenharmony_ci return amdgpu_bo_alloc_and_map_raw(dev, size, alignment, heap, 460d722e3fbSopenharmony_ci alloc_flags, 0, bo, cpu, mc_address, va_handle); 461d722e3fbSopenharmony_ci} 462d722e3fbSopenharmony_ci 463d722e3fbSopenharmony_cistatic inline int 464d722e3fbSopenharmony_ciamdgpu_bo_unmap_and_free(amdgpu_bo_handle bo, amdgpu_va_handle va_handle, 465d722e3fbSopenharmony_ci uint64_t mc_addr, uint64_t size) 466d722e3fbSopenharmony_ci{ 467d722e3fbSopenharmony_ci amdgpu_bo_cpu_unmap(bo); 468d722e3fbSopenharmony_ci amdgpu_bo_va_op(bo, 0, size, mc_addr, 0, AMDGPU_VA_OP_UNMAP); 469d722e3fbSopenharmony_ci amdgpu_va_range_free(va_handle); 470d722e3fbSopenharmony_ci amdgpu_bo_free(bo); 471d722e3fbSopenharmony_ci 472d722e3fbSopenharmony_ci return 0; 473d722e3fbSopenharmony_ci 474d722e3fbSopenharmony_ci} 475d722e3fbSopenharmony_ci 476d722e3fbSopenharmony_cistatic inline int 477d722e3fbSopenharmony_ciamdgpu_get_bo_list(amdgpu_device_handle dev, amdgpu_bo_handle bo1, 478d722e3fbSopenharmony_ci amdgpu_bo_handle bo2, amdgpu_bo_list_handle *list) 479d722e3fbSopenharmony_ci{ 480d722e3fbSopenharmony_ci amdgpu_bo_handle resources[] = {bo1, bo2}; 481d722e3fbSopenharmony_ci 482d722e3fbSopenharmony_ci return amdgpu_bo_list_create(dev, bo2 ? 2 : 1, resources, NULL, list); 483d722e3fbSopenharmony_ci} 484d722e3fbSopenharmony_ci 485d722e3fbSopenharmony_ci 486d722e3fbSopenharmony_cistatic inline CU_ErrorCode amdgpu_set_suite_active(const char *suite_name, 487d722e3fbSopenharmony_ci CU_BOOL active) 488d722e3fbSopenharmony_ci{ 489d722e3fbSopenharmony_ci CU_ErrorCode r = CU_set_suite_active(CU_get_suite(suite_name), active); 490d722e3fbSopenharmony_ci 491d722e3fbSopenharmony_ci if (r != CUE_SUCCESS) 492d722e3fbSopenharmony_ci fprintf(stderr, "Failed to obtain suite %s\n", suite_name); 493d722e3fbSopenharmony_ci 494d722e3fbSopenharmony_ci return r; 495d722e3fbSopenharmony_ci} 496d722e3fbSopenharmony_ci 497d722e3fbSopenharmony_cistatic inline CU_ErrorCode amdgpu_set_test_active(const char *suite_name, 498d722e3fbSopenharmony_ci const char *test_name, CU_BOOL active) 499d722e3fbSopenharmony_ci{ 500d722e3fbSopenharmony_ci CU_ErrorCode r; 501d722e3fbSopenharmony_ci CU_pSuite pSuite = CU_get_suite(suite_name); 502d722e3fbSopenharmony_ci 503d722e3fbSopenharmony_ci if (!pSuite) { 504d722e3fbSopenharmony_ci fprintf(stderr, "Failed to obtain suite %s\n", 505d722e3fbSopenharmony_ci suite_name); 506d722e3fbSopenharmony_ci return CUE_NOSUITE; 507d722e3fbSopenharmony_ci } 508d722e3fbSopenharmony_ci 509d722e3fbSopenharmony_ci r = CU_set_test_active(CU_get_test(pSuite, test_name), active); 510d722e3fbSopenharmony_ci if (r != CUE_SUCCESS) 511d722e3fbSopenharmony_ci fprintf(stderr, "Failed to obtain test %s\n", test_name); 512d722e3fbSopenharmony_ci 513d722e3fbSopenharmony_ci return r; 514d722e3fbSopenharmony_ci} 515d722e3fbSopenharmony_ci 516d722e3fbSopenharmony_ci 517d722e3fbSopenharmony_cistatic inline bool asic_is_gfx_pipe_removed(uint32_t family_id, uint32_t chip_id, uint32_t chip_rev) 518d722e3fbSopenharmony_ci{ 519d722e3fbSopenharmony_ci 520d722e3fbSopenharmony_ci if (family_id != AMDGPU_FAMILY_AI) 521d722e3fbSopenharmony_ci return false; 522d722e3fbSopenharmony_ci 523d722e3fbSopenharmony_ci switch (chip_id - chip_rev) { 524d722e3fbSopenharmony_ci /* Arcturus */ 525d722e3fbSopenharmony_ci case 0x32: 526d722e3fbSopenharmony_ci /* Aldebaran */ 527d722e3fbSopenharmony_ci case 0x3c: 528d722e3fbSopenharmony_ci return true; 529d722e3fbSopenharmony_ci default: 530d722e3fbSopenharmony_ci return false; 531d722e3fbSopenharmony_ci } 532d722e3fbSopenharmony_ci} 533d722e3fbSopenharmony_ci 534d722e3fbSopenharmony_civoid amdgpu_test_exec_cs_helper_raw(amdgpu_device_handle device_handle, 535d722e3fbSopenharmony_ci amdgpu_context_handle context_handle, 536d722e3fbSopenharmony_ci unsigned ip_type, int instance, int pm4_dw, 537d722e3fbSopenharmony_ci uint32_t *pm4_src, int res_cnt, 538d722e3fbSopenharmony_ci amdgpu_bo_handle *resources, 539d722e3fbSopenharmony_ci struct amdgpu_cs_ib_info *ib_info, 540d722e3fbSopenharmony_ci struct amdgpu_cs_request *ibs_request, 541d722e3fbSopenharmony_ci bool secure); 542d722e3fbSopenharmony_ci 543d722e3fbSopenharmony_civoid amdgpu_close_devices(); 544d722e3fbSopenharmony_ciint amdgpu_open_device_on_test_index(int render_node); 545d722e3fbSopenharmony_cichar *amdgpu_get_device_from_fd(int fd); 546d722e3fbSopenharmony_ci 547d722e3fbSopenharmony_ci#endif /* #ifdef _AMDGPU_TEST_H_ */ 548