amdgpu_test.h revision 41687f09
13f012e29Smrg/* 23f012e29Smrg * Copyright 2014 Advanced Micro Devices, Inc. 33f012e29Smrg * 43f012e29Smrg * Permission is hereby granted, free of charge, to any person obtaining a 53f012e29Smrg * copy of this software and associated documentation files (the "Software"), 63f012e29Smrg * to deal in the Software without restriction, including without limitation 73f012e29Smrg * the rights to use, copy, modify, merge, publish, distribute, sublicense, 83f012e29Smrg * and/or sell copies of the Software, and to permit persons to whom the 93f012e29Smrg * Software is furnished to do so, subject to the following conditions: 103f012e29Smrg * 113f012e29Smrg * The above copyright notice and this permission notice shall be included in 123f012e29Smrg * all copies or substantial portions of the Software. 133f012e29Smrg * 143f012e29Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 153f012e29Smrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 163f012e29Smrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 173f012e29Smrg * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 183f012e29Smrg * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 193f012e29Smrg * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 203f012e29Smrg * OTHER DEALINGS IN THE SOFTWARE. 213f012e29Smrg * 223f012e29Smrg*/ 233f012e29Smrg 243f012e29Smrg#ifndef _AMDGPU_TEST_H_ 253f012e29Smrg#define _AMDGPU_TEST_H_ 263f012e29Smrg 273f012e29Smrg#include "amdgpu.h" 283f012e29Smrg#include "amdgpu_drm.h" 293f012e29Smrg 303f012e29Smrg/** 313f012e29Smrg * Define max. number of card in system which we are able to handle 323f012e29Smrg */ 337cdc0497Smrg#define MAX_CARDS_SUPPORTED 128 343f012e29Smrg 353f012e29Smrg/* Forward reference for array to keep "drm" handles */ 363f012e29Smrgextern int drm_amdgpu[MAX_CARDS_SUPPORTED]; 373f012e29Smrg 38037b3c26Smrg/* Global variables */ 39037b3c26Smrgextern int open_render_node; 40037b3c26Smrg 413f012e29Smrg/************************* Basic test suite ********************************/ 423f012e29Smrg 433f012e29Smrg/* 443f012e29Smrg * Define basic test suite to serve as the starting point for future testing 453f012e29Smrg*/ 463f012e29Smrg 473f012e29Smrg/** 483f012e29Smrg * Initialize basic test suite 493f012e29Smrg */ 503f012e29Smrgint suite_basic_tests_init(); 513f012e29Smrg 523f012e29Smrg/** 533f012e29Smrg * Deinitialize basic test suite 543f012e29Smrg */ 553f012e29Smrgint suite_basic_tests_clean(); 563f012e29Smrg 5741687f09Smrg/** 5841687f09Smrg * Decide if the suite is enabled by default or not. 5941687f09Smrg */ 6041687f09SmrgCU_BOOL suite_basic_tests_enable(void); 6141687f09Smrg 623f012e29Smrg/** 633f012e29Smrg * Tests in basic test suite 643f012e29Smrg */ 653f012e29Smrgextern CU_TestInfo basic_tests[]; 663f012e29Smrg 673f012e29Smrg/** 683f012e29Smrg * Initialize bo test suite 693f012e29Smrg */ 703f012e29Smrgint suite_bo_tests_init(); 713f012e29Smrg 723f012e29Smrg/** 733f012e29Smrg * Deinitialize bo test suite 743f012e29Smrg */ 753f012e29Smrgint suite_bo_tests_clean(); 763f012e29Smrg 773f012e29Smrg/** 783f012e29Smrg * Tests in bo test suite 793f012e29Smrg */ 803f012e29Smrgextern CU_TestInfo bo_tests[]; 813f012e29Smrg 823f012e29Smrg/** 833f012e29Smrg * Initialize cs test suite 843f012e29Smrg */ 853f012e29Smrgint suite_cs_tests_init(); 863f012e29Smrg 873f012e29Smrg/** 883f012e29Smrg * Deinitialize cs test suite 893f012e29Smrg */ 903f012e29Smrgint suite_cs_tests_clean(); 913f012e29Smrg 9200a23bdaSmrg/** 9300a23bdaSmrg * Decide if the suite is enabled by default or not. 9400a23bdaSmrg */ 9500a23bdaSmrgCU_BOOL suite_cs_tests_enable(void); 9600a23bdaSmrg 973f012e29Smrg/** 983f012e29Smrg * Tests in cs test suite 993f012e29Smrg */ 1003f012e29Smrgextern CU_TestInfo cs_tests[]; 1013f012e29Smrg 1023f012e29Smrg/** 1033f012e29Smrg * Initialize vce test suite 1043f012e29Smrg */ 1053f012e29Smrgint suite_vce_tests_init(); 1063f012e29Smrg 1073f012e29Smrg/** 1083f012e29Smrg * Deinitialize vce test suite 1093f012e29Smrg */ 1103f012e29Smrgint suite_vce_tests_clean(); 1113f012e29Smrg 11200a23bdaSmrg/** 11300a23bdaSmrg * Decide if the suite is enabled by default or not. 11400a23bdaSmrg */ 11500a23bdaSmrgCU_BOOL suite_vce_tests_enable(void); 11600a23bdaSmrg 1173f012e29Smrg/** 1183f012e29Smrg * Tests in vce test suite 1193f012e29Smrg */ 1203f012e29Smrgextern CU_TestInfo vce_tests[]; 1213f012e29Smrg 122d8807b2fSmrg/** 123d8807b2fSmrg+ * Initialize vcn test suite 124d8807b2fSmrg+ */ 125d8807b2fSmrgint suite_vcn_tests_init(); 126d8807b2fSmrg 127d8807b2fSmrg/** 128d8807b2fSmrg+ * Deinitialize vcn test suite 129d8807b2fSmrg+ */ 130d8807b2fSmrgint suite_vcn_tests_clean(); 131d8807b2fSmrg 13200a23bdaSmrg/** 13300a23bdaSmrg * Decide if the suite is enabled by default or not. 13400a23bdaSmrg */ 13500a23bdaSmrgCU_BOOL suite_vcn_tests_enable(void); 13600a23bdaSmrg 137d8807b2fSmrg/** 138d8807b2fSmrg+ * Tests in vcn test suite 139d8807b2fSmrg+ */ 140d8807b2fSmrgextern CU_TestInfo vcn_tests[]; 141d8807b2fSmrg 142d8807b2fSmrg/** 143d8807b2fSmrg * Initialize uvd enc test suite 144d8807b2fSmrg */ 145d8807b2fSmrgint suite_uvd_enc_tests_init(); 146d8807b2fSmrg 147d8807b2fSmrg/** 148d8807b2fSmrg * Deinitialize uvd enc test suite 149d8807b2fSmrg */ 150d8807b2fSmrgint suite_uvd_enc_tests_clean(); 151d8807b2fSmrg 15200a23bdaSmrg/** 15300a23bdaSmrg * Decide if the suite is enabled by default or not. 15400a23bdaSmrg */ 15500a23bdaSmrgCU_BOOL suite_uvd_enc_tests_enable(void); 15600a23bdaSmrg 157d8807b2fSmrg/** 158d8807b2fSmrg * Tests in uvd enc test suite 159d8807b2fSmrg */ 160d8807b2fSmrgextern CU_TestInfo uvd_enc_tests[]; 161d8807b2fSmrg 16200a23bdaSmrg/** 16300a23bdaSmrg * Initialize deadlock test suite 16400a23bdaSmrg */ 16500a23bdaSmrgint suite_deadlock_tests_init(); 16600a23bdaSmrg 16700a23bdaSmrg/** 16800a23bdaSmrg * Deinitialize deadlock test suite 16900a23bdaSmrg */ 17000a23bdaSmrgint suite_deadlock_tests_clean(); 17100a23bdaSmrg 17200a23bdaSmrg/** 17300a23bdaSmrg * Decide if the suite is enabled by default or not. 17400a23bdaSmrg */ 17500a23bdaSmrgCU_BOOL suite_deadlock_tests_enable(void); 17600a23bdaSmrg 17700a23bdaSmrg/** 17800a23bdaSmrg * Tests in uvd enc test suite 17900a23bdaSmrg */ 18000a23bdaSmrgextern CU_TestInfo deadlock_tests[]; 18100a23bdaSmrg 18200a23bdaSmrg/** 18300a23bdaSmrg * Initialize vm test suite 18400a23bdaSmrg */ 18500a23bdaSmrgint suite_vm_tests_init(); 18600a23bdaSmrg 18700a23bdaSmrg/** 18800a23bdaSmrg * Deinitialize deadlock test suite 18900a23bdaSmrg */ 19000a23bdaSmrgint suite_vm_tests_clean(); 19100a23bdaSmrg 19200a23bdaSmrg/** 19300a23bdaSmrg * Decide if the suite is enabled by default or not. 19400a23bdaSmrg */ 19500a23bdaSmrgCU_BOOL suite_vm_tests_enable(void); 19600a23bdaSmrg 19700a23bdaSmrg/** 19800a23bdaSmrg * Tests in vm test suite 19900a23bdaSmrg */ 20000a23bdaSmrgextern CU_TestInfo vm_tests[]; 20100a23bdaSmrg 2025324fb0dSmrg 2035324fb0dSmrg/** 2045324fb0dSmrg * Initialize ras test suite 2055324fb0dSmrg */ 2065324fb0dSmrgint suite_ras_tests_init(); 2075324fb0dSmrg 2085324fb0dSmrg/** 2095324fb0dSmrg * Deinitialize deadlock test suite 2105324fb0dSmrg */ 2115324fb0dSmrgint suite_ras_tests_clean(); 2125324fb0dSmrg 2135324fb0dSmrg/** 2145324fb0dSmrg * Decide if the suite is enabled by default or not. 2155324fb0dSmrg */ 2165324fb0dSmrgCU_BOOL suite_ras_tests_enable(void); 2175324fb0dSmrg 2185324fb0dSmrg/** 2195324fb0dSmrg * Tests in ras test suite 2205324fb0dSmrg */ 2215324fb0dSmrgextern CU_TestInfo ras_tests[]; 2225324fb0dSmrg 2235324fb0dSmrg 2245324fb0dSmrg/** 2255324fb0dSmrg * Initialize syncobj timeline test suite 2265324fb0dSmrg */ 2275324fb0dSmrgint suite_syncobj_timeline_tests_init(); 2285324fb0dSmrg 2295324fb0dSmrg/** 2305324fb0dSmrg * Deinitialize syncobj timeline test suite 2315324fb0dSmrg */ 2325324fb0dSmrgint suite_syncobj_timeline_tests_clean(); 2335324fb0dSmrg 2345324fb0dSmrg/** 2355324fb0dSmrg * Decide if the suite is enabled by default or not. 2365324fb0dSmrg */ 2375324fb0dSmrgCU_BOOL suite_syncobj_timeline_tests_enable(void); 2385324fb0dSmrg 2395324fb0dSmrg/** 2405324fb0dSmrg * Tests in syncobj timeline test suite 2415324fb0dSmrg */ 2425324fb0dSmrgextern CU_TestInfo syncobj_timeline_tests[]; 2435324fb0dSmrg 2449bd392adSmrgvoid amdgpu_dispatch_hang_helper(amdgpu_device_handle device_handle, uint32_t ip_type); 2459bd392adSmrgvoid amdgpu_dispatch_hang_slow_helper(amdgpu_device_handle device_handle, uint32_t ip_type); 2469bd392adSmrgvoid amdgpu_memcpy_draw_test(amdgpu_device_handle device_handle, uint32_t ring, 2479bd392adSmrg int hang); 2489bd392adSmrgvoid amdgpu_memcpy_draw_hang_slow_test(amdgpu_device_handle device_handle, uint32_t ring); 2495324fb0dSmrg 25041687f09Smrg/** 25141687f09Smrg * Initialize security test suite 25241687f09Smrg */ 25341687f09Smrgint suite_security_tests_init(); 25441687f09Smrg 25541687f09Smrg/** 25641687f09Smrg * Deinitialize security test suite 25741687f09Smrg */ 25841687f09Smrgint suite_security_tests_clean(); 25941687f09Smrg 26041687f09Smrg/** 26141687f09Smrg * Decide if the suite is enabled by default or not. 26241687f09Smrg */ 26341687f09SmrgCU_BOOL suite_security_tests_enable(void); 26441687f09Smrg 26541687f09Smrg/** 26641687f09Smrg * Tests in security test suite 26741687f09Smrg */ 26841687f09Smrgextern CU_TestInfo security_tests[]; 26941687f09Smrg 27041687f09Smrgextern void 27141687f09Smrgamdgpu_command_submission_write_linear_helper_with_secure(amdgpu_device_handle 27241687f09Smrg device, 27341687f09Smrg unsigned ip_type, 27441687f09Smrg bool secure); 27541687f09Smrg 2763f012e29Smrg/** 2773f012e29Smrg * Helper functions 2783f012e29Smrg */ 2793f012e29Smrgstatic inline amdgpu_bo_handle gpu_mem_alloc( 2803f012e29Smrg amdgpu_device_handle device_handle, 2813f012e29Smrg uint64_t size, 2823f012e29Smrg uint64_t alignment, 2833f012e29Smrg uint32_t type, 2843f012e29Smrg uint64_t flags, 2853f012e29Smrg uint64_t *vmc_addr, 2863f012e29Smrg amdgpu_va_handle *va_handle) 2873f012e29Smrg{ 2883f012e29Smrg struct amdgpu_bo_alloc_request req = {0}; 2897cdc0497Smrg amdgpu_bo_handle buf_handle = NULL; 2903f012e29Smrg int r; 2913f012e29Smrg 2923f012e29Smrg req.alloc_size = size; 2933f012e29Smrg req.phys_alignment = alignment; 2943f012e29Smrg req.preferred_heap = type; 2953f012e29Smrg req.flags = flags; 2963f012e29Smrg 2973f012e29Smrg r = amdgpu_bo_alloc(device_handle, &req, &buf_handle); 2983f012e29Smrg CU_ASSERT_EQUAL(r, 0); 2997cdc0497Smrg if (r) 3007cdc0497Smrg return NULL; 3017cdc0497Smrg 3027cdc0497Smrg if (vmc_addr && va_handle) { 3037cdc0497Smrg r = amdgpu_va_range_alloc(device_handle, 3047cdc0497Smrg amdgpu_gpu_va_range_general, 3057cdc0497Smrg size, alignment, 0, vmc_addr, 3067cdc0497Smrg va_handle, 0); 3077cdc0497Smrg CU_ASSERT_EQUAL(r, 0); 3087cdc0497Smrg if (r) 3097cdc0497Smrg goto error_free_bo; 3107cdc0497Smrg 3117cdc0497Smrg r = amdgpu_bo_va_op(buf_handle, 0, size, *vmc_addr, 0, 3127cdc0497Smrg AMDGPU_VA_OP_MAP); 3137cdc0497Smrg CU_ASSERT_EQUAL(r, 0); 3147cdc0497Smrg if (r) 3157cdc0497Smrg goto error_free_va; 3167cdc0497Smrg } 3177cdc0497Smrg 3187cdc0497Smrg return buf_handle; 3193f012e29Smrg 3207cdc0497Smrgerror_free_va: 3217cdc0497Smrg r = amdgpu_va_range_free(*va_handle); 3223f012e29Smrg CU_ASSERT_EQUAL(r, 0); 3233f012e29Smrg 3247cdc0497Smrgerror_free_bo: 3257cdc0497Smrg r = amdgpu_bo_free(buf_handle); 3263f012e29Smrg CU_ASSERT_EQUAL(r, 0); 3273f012e29Smrg 3287cdc0497Smrg return NULL; 3293f012e29Smrg} 3303f012e29Smrg 3313f012e29Smrgstatic inline int gpu_mem_free(amdgpu_bo_handle bo, 3323f012e29Smrg amdgpu_va_handle va_handle, 3333f012e29Smrg uint64_t vmc_addr, 3343f012e29Smrg uint64_t size) 3353f012e29Smrg{ 3363f012e29Smrg int r; 3373f012e29Smrg 3387cdc0497Smrg if (!bo) 3397cdc0497Smrg return 0; 3403f012e29Smrg 3417cdc0497Smrg if (va_handle) { 3427cdc0497Smrg r = amdgpu_bo_va_op(bo, 0, size, vmc_addr, 0, 3437cdc0497Smrg AMDGPU_VA_OP_UNMAP); 3447cdc0497Smrg CU_ASSERT_EQUAL(r, 0); 3457cdc0497Smrg if (r) 3467cdc0497Smrg return r; 3477cdc0497Smrg 3487cdc0497Smrg r = amdgpu_va_range_free(va_handle); 3497cdc0497Smrg CU_ASSERT_EQUAL(r, 0); 3507cdc0497Smrg if (r) 3517cdc0497Smrg return r; 3527cdc0497Smrg } 3533f012e29Smrg 3543f012e29Smrg r = amdgpu_bo_free(bo); 3553f012e29Smrg CU_ASSERT_EQUAL(r, 0); 3563f012e29Smrg 3577cdc0497Smrg return r; 3583f012e29Smrg} 3593f012e29Smrg 36000a23bdaSmrgstatic inline int 36100a23bdaSmrgamdgpu_bo_alloc_wrap(amdgpu_device_handle dev, unsigned size, 36200a23bdaSmrg unsigned alignment, unsigned heap, uint64_t flags, 36300a23bdaSmrg amdgpu_bo_handle *bo) 36400a23bdaSmrg{ 36500a23bdaSmrg struct amdgpu_bo_alloc_request request = {}; 36600a23bdaSmrg amdgpu_bo_handle buf_handle; 36700a23bdaSmrg int r; 36800a23bdaSmrg 36900a23bdaSmrg request.alloc_size = size; 37000a23bdaSmrg request.phys_alignment = alignment; 37100a23bdaSmrg request.preferred_heap = heap; 37200a23bdaSmrg request.flags = flags; 37300a23bdaSmrg 37400a23bdaSmrg r = amdgpu_bo_alloc(dev, &request, &buf_handle); 37500a23bdaSmrg if (r) 37600a23bdaSmrg return r; 37700a23bdaSmrg 37800a23bdaSmrg *bo = buf_handle; 37900a23bdaSmrg 38000a23bdaSmrg return 0; 38100a23bdaSmrg} 38200a23bdaSmrg 3837cdc0497Smrgint amdgpu_bo_alloc_and_map_raw(amdgpu_device_handle dev, unsigned size, 3847cdc0497Smrg unsigned alignment, unsigned heap, uint64_t alloc_flags, 3857cdc0497Smrg uint64_t mapping_flags, amdgpu_bo_handle *bo, void **cpu, 3867cdc0497Smrg uint64_t *mc_address, 3877cdc0497Smrg amdgpu_va_handle *va_handle); 3887cdc0497Smrg 3893f012e29Smrgstatic inline int 3903f012e29Smrgamdgpu_bo_alloc_and_map(amdgpu_device_handle dev, unsigned size, 3917cdc0497Smrg unsigned alignment, unsigned heap, uint64_t alloc_flags, 3923f012e29Smrg amdgpu_bo_handle *bo, void **cpu, uint64_t *mc_address, 3933f012e29Smrg amdgpu_va_handle *va_handle) 3943f012e29Smrg{ 3957cdc0497Smrg return amdgpu_bo_alloc_and_map_raw(dev, size, alignment, heap, 3967cdc0497Smrg alloc_flags, 0, bo, cpu, mc_address, va_handle); 3973f012e29Smrg} 3983f012e29Smrg 3993f012e29Smrgstatic inline int 4003f012e29Smrgamdgpu_bo_unmap_and_free(amdgpu_bo_handle bo, amdgpu_va_handle va_handle, 4013f012e29Smrg uint64_t mc_addr, uint64_t size) 4023f012e29Smrg{ 4033f012e29Smrg amdgpu_bo_cpu_unmap(bo); 4043f012e29Smrg amdgpu_bo_va_op(bo, 0, size, mc_addr, 0, AMDGPU_VA_OP_UNMAP); 4053f012e29Smrg amdgpu_va_range_free(va_handle); 4063f012e29Smrg amdgpu_bo_free(bo); 4073f012e29Smrg 4083f012e29Smrg return 0; 4093f012e29Smrg 4103f012e29Smrg} 4113f012e29Smrg 4123f012e29Smrgstatic inline int 4133f012e29Smrgamdgpu_get_bo_list(amdgpu_device_handle dev, amdgpu_bo_handle bo1, 4143f012e29Smrg amdgpu_bo_handle bo2, amdgpu_bo_list_handle *list) 4153f012e29Smrg{ 4163f012e29Smrg amdgpu_bo_handle resources[] = {bo1, bo2}; 4173f012e29Smrg 4183f012e29Smrg return amdgpu_bo_list_create(dev, bo2 ? 2 : 1, resources, NULL, list); 4193f012e29Smrg} 4203f012e29Smrg 42100a23bdaSmrg 42200a23bdaSmrgstatic inline CU_ErrorCode amdgpu_set_suite_active(const char *suite_name, 42300a23bdaSmrg CU_BOOL active) 42400a23bdaSmrg{ 42500a23bdaSmrg CU_ErrorCode r = CU_set_suite_active(CU_get_suite(suite_name), active); 42600a23bdaSmrg 42700a23bdaSmrg if (r != CUE_SUCCESS) 42800a23bdaSmrg fprintf(stderr, "Failed to obtain suite %s\n", suite_name); 42900a23bdaSmrg 43000a23bdaSmrg return r; 43100a23bdaSmrg} 43200a23bdaSmrg 43300a23bdaSmrgstatic inline CU_ErrorCode amdgpu_set_test_active(const char *suite_name, 43400a23bdaSmrg const char *test_name, CU_BOOL active) 43500a23bdaSmrg{ 43600a23bdaSmrg CU_ErrorCode r; 43700a23bdaSmrg CU_pSuite pSuite = CU_get_suite(suite_name); 43800a23bdaSmrg 43900a23bdaSmrg if (!pSuite) { 44000a23bdaSmrg fprintf(stderr, "Failed to obtain suite %s\n", 44100a23bdaSmrg suite_name); 44200a23bdaSmrg return CUE_NOSUITE; 44300a23bdaSmrg } 44400a23bdaSmrg 44500a23bdaSmrg r = CU_set_test_active(CU_get_test(pSuite, test_name), active); 44600a23bdaSmrg if (r != CUE_SUCCESS) 44700a23bdaSmrg fprintf(stderr, "Failed to obtain test %s\n", test_name); 44800a23bdaSmrg 44900a23bdaSmrg return r; 45000a23bdaSmrg} 45100a23bdaSmrg 45241687f09Smrgstatic inline bool asic_is_arcturus(uint32_t asic_id) 45341687f09Smrg{ 45441687f09Smrg switch(asic_id) { 45541687f09Smrg /* Arcturus asic DID */ 45641687f09Smrg case 0x738C: 45741687f09Smrg case 0x7388: 45841687f09Smrg case 0x738E: 45941687f09Smrg return true; 46041687f09Smrg default: 46141687f09Smrg return false; 46241687f09Smrg } 46341687f09Smrg} 46441687f09Smrg 46541687f09Smrgvoid amdgpu_test_exec_cs_helper_raw(amdgpu_device_handle device_handle, 46641687f09Smrg amdgpu_context_handle context_handle, 46741687f09Smrg unsigned ip_type, int instance, int pm4_dw, 46841687f09Smrg uint32_t *pm4_src, int res_cnt, 46941687f09Smrg amdgpu_bo_handle *resources, 47041687f09Smrg struct amdgpu_cs_ib_info *ib_info, 47141687f09Smrg struct amdgpu_cs_request *ibs_request, 47241687f09Smrg bool secure); 47341687f09Smrg 4743f012e29Smrg#endif /* #ifdef _AMDGPU_TEST_H_ */ 475