vcn_tests.c revision 9bd392ad
1d8807b2fSmrg/* 2d8807b2fSmrg * Copyright 2017 Advanced Micro Devices, Inc. 3d8807b2fSmrg * 4d8807b2fSmrg * Permission is hereby granted, free of charge, to any person obtaining a 5d8807b2fSmrg * copy of this software and associated documentation files (the "Software"), 6d8807b2fSmrg * to deal in the Software without restriction, including without limitation 7d8807b2fSmrg * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8d8807b2fSmrg * and/or sell copies of the Software, and to permit persons to whom the 9d8807b2fSmrg * Software is furnished to do so, subject to the following conditions: 10d8807b2fSmrg * 11d8807b2fSmrg * The above copyright notice and this permission notice shall be included in 12d8807b2fSmrg * all copies or substantial portions of the Software. 13d8807b2fSmrg * 14d8807b2fSmrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15d8807b2fSmrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16d8807b2fSmrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17d8807b2fSmrg * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 18d8807b2fSmrg * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 19d8807b2fSmrg * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 20d8807b2fSmrg * OTHER DEALINGS IN THE SOFTWARE. 21d8807b2fSmrg * 22d8807b2fSmrg*/ 23d8807b2fSmrg 24d8807b2fSmrg#include <stdio.h> 25d8807b2fSmrg#include <inttypes.h> 26d8807b2fSmrg 27d8807b2fSmrg#include "CUnit/Basic.h" 28d8807b2fSmrg 29d8807b2fSmrg#include "util_math.h" 30d8807b2fSmrg 31d8807b2fSmrg#include "amdgpu_test.h" 32d8807b2fSmrg#include "amdgpu_drm.h" 33d8807b2fSmrg#include "amdgpu_internal.h" 34d8807b2fSmrg#include "decode_messages.h" 35d8807b2fSmrg 36d8807b2fSmrg#define IB_SIZE 4096 37d8807b2fSmrg#define MAX_RESOURCES 16 38d8807b2fSmrg 39d8807b2fSmrgstruct amdgpu_vcn_bo { 40d8807b2fSmrg amdgpu_bo_handle handle; 41d8807b2fSmrg amdgpu_va_handle va_handle; 42d8807b2fSmrg uint64_t addr; 43d8807b2fSmrg uint64_t size; 44d8807b2fSmrg uint8_t *ptr; 45d8807b2fSmrg}; 46d8807b2fSmrg 475324fb0dSmrgstruct amdgpu_vcn_reg { 485324fb0dSmrg uint32_t data0; 495324fb0dSmrg uint32_t data1; 505324fb0dSmrg uint32_t cmd; 515324fb0dSmrg uint32_t nop; 525324fb0dSmrg uint32_t cntl; 535324fb0dSmrg}; 545324fb0dSmrg 55d8807b2fSmrgstatic amdgpu_device_handle device_handle; 56d8807b2fSmrgstatic uint32_t major_version; 57d8807b2fSmrgstatic uint32_t minor_version; 58d8807b2fSmrgstatic uint32_t family_id; 599bd392adSmrgstatic uint32_t asic_id; 60d8807b2fSmrg 61d8807b2fSmrgstatic amdgpu_context_handle context_handle; 62d8807b2fSmrgstatic amdgpu_bo_handle ib_handle; 63d8807b2fSmrgstatic amdgpu_va_handle ib_va_handle; 64d8807b2fSmrgstatic uint64_t ib_mc_address; 65d8807b2fSmrgstatic uint32_t *ib_cpu; 66d8807b2fSmrg 67d8807b2fSmrgstatic amdgpu_bo_handle resources[MAX_RESOURCES]; 68d8807b2fSmrgstatic unsigned num_resources; 695324fb0dSmrgstatic struct amdgpu_vcn_reg reg; 70d8807b2fSmrg 71d8807b2fSmrgstatic void amdgpu_cs_vcn_dec_create(void); 72d8807b2fSmrgstatic void amdgpu_cs_vcn_dec_decode(void); 73d8807b2fSmrgstatic void amdgpu_cs_vcn_dec_destroy(void); 74d8807b2fSmrg 75d8807b2fSmrgstatic void amdgpu_cs_vcn_enc_create(void); 76d8807b2fSmrgstatic void amdgpu_cs_vcn_enc_encode(void); 77d8807b2fSmrgstatic void amdgpu_cs_vcn_enc_destroy(void); 78d8807b2fSmrg 79d8807b2fSmrgCU_TestInfo vcn_tests[] = { 80d8807b2fSmrg 81d8807b2fSmrg { "VCN DEC create", amdgpu_cs_vcn_dec_create }, 82d8807b2fSmrg { "VCN DEC decode", amdgpu_cs_vcn_dec_decode }, 83d8807b2fSmrg { "VCN DEC destroy", amdgpu_cs_vcn_dec_destroy }, 84d8807b2fSmrg 85d8807b2fSmrg { "VCN ENC create", amdgpu_cs_vcn_enc_create }, 86d8807b2fSmrg { "VCN ENC decode", amdgpu_cs_vcn_enc_encode }, 87d8807b2fSmrg { "VCN ENC destroy", amdgpu_cs_vcn_enc_destroy }, 88d8807b2fSmrg CU_TEST_INFO_NULL, 89d8807b2fSmrg}; 90d8807b2fSmrg 9100a23bdaSmrgCU_BOOL suite_vcn_tests_enable(void) 9200a23bdaSmrg{ 9300a23bdaSmrg 9400a23bdaSmrg if (amdgpu_device_initialize(drm_amdgpu[0], &major_version, 9500a23bdaSmrg &minor_version, &device_handle)) 9600a23bdaSmrg return CU_FALSE; 9700a23bdaSmrg 9800a23bdaSmrg family_id = device_handle->info.family_id; 999bd392adSmrg asic_id = device_handle->info.asic_id; 10000a23bdaSmrg 10100a23bdaSmrg if (amdgpu_device_deinitialize(device_handle)) 10200a23bdaSmrg return CU_FALSE; 10300a23bdaSmrg 10400a23bdaSmrg 10500a23bdaSmrg if (family_id < AMDGPU_FAMILY_RV) { 10600a23bdaSmrg printf("\n\nThe ASIC NOT support VCN, suite disabled\n"); 10700a23bdaSmrg return CU_FALSE; 10800a23bdaSmrg } 10900a23bdaSmrg 1105324fb0dSmrg if (family_id == AMDGPU_FAMILY_RV) { 1119bd392adSmrg if (asic_id == 0x1636) { 1129bd392adSmrg reg.data0 = 0x504; 1139bd392adSmrg reg.data1 = 0x505; 1149bd392adSmrg reg.cmd = 0x503; 1159bd392adSmrg reg.nop = 0x53f; 1169bd392adSmrg reg.cntl = 0x506; 1179bd392adSmrg } else { 1189bd392adSmrg reg.data0 = 0x81c4; 1199bd392adSmrg reg.data1 = 0x81c5; 1209bd392adSmrg reg.cmd = 0x81c3; 1219bd392adSmrg reg.nop = 0x81ff; 1229bd392adSmrg reg.cntl = 0x81c6; 1239bd392adSmrg } 1245324fb0dSmrg } else if (family_id == AMDGPU_FAMILY_NV) { 1255324fb0dSmrg reg.data0 = 0x504; 1265324fb0dSmrg reg.data1 = 0x505; 1275324fb0dSmrg reg.cmd = 0x503; 1285324fb0dSmrg reg.nop = 0x53f; 1295324fb0dSmrg reg.cntl = 0x506; 1305324fb0dSmrg } else 1315324fb0dSmrg return CU_FALSE; 1325324fb0dSmrg 13300a23bdaSmrg return CU_TRUE; 13400a23bdaSmrg} 13500a23bdaSmrg 136d8807b2fSmrgint suite_vcn_tests_init(void) 137d8807b2fSmrg{ 138d8807b2fSmrg int r; 139d8807b2fSmrg 140d8807b2fSmrg r = amdgpu_device_initialize(drm_amdgpu[0], &major_version, 141d8807b2fSmrg &minor_version, &device_handle); 142d8807b2fSmrg if (r) 143d8807b2fSmrg return CUE_SINIT_FAILED; 144d8807b2fSmrg 145d8807b2fSmrg family_id = device_handle->info.family_id; 146d8807b2fSmrg 147d8807b2fSmrg r = amdgpu_cs_ctx_create(device_handle, &context_handle); 148d8807b2fSmrg if (r) 149d8807b2fSmrg return CUE_SINIT_FAILED; 150d8807b2fSmrg 151d8807b2fSmrg r = amdgpu_bo_alloc_and_map(device_handle, IB_SIZE, 4096, 152d8807b2fSmrg AMDGPU_GEM_DOMAIN_GTT, 0, 153d8807b2fSmrg &ib_handle, (void**)&ib_cpu, 154d8807b2fSmrg &ib_mc_address, &ib_va_handle); 155d8807b2fSmrg if (r) 156d8807b2fSmrg return CUE_SINIT_FAILED; 157d8807b2fSmrg 158d8807b2fSmrg return CUE_SUCCESS; 159d8807b2fSmrg} 160d8807b2fSmrg 161d8807b2fSmrgint suite_vcn_tests_clean(void) 162d8807b2fSmrg{ 163d8807b2fSmrg int r; 164d8807b2fSmrg 16500a23bdaSmrg r = amdgpu_bo_unmap_and_free(ib_handle, ib_va_handle, 16600a23bdaSmrg ib_mc_address, IB_SIZE); 16700a23bdaSmrg if (r) 16800a23bdaSmrg return CUE_SCLEAN_FAILED; 16900a23bdaSmrg 17000a23bdaSmrg r = amdgpu_cs_ctx_free(context_handle); 17100a23bdaSmrg if (r) 17200a23bdaSmrg return CUE_SCLEAN_FAILED; 17300a23bdaSmrg 17400a23bdaSmrg r = amdgpu_device_deinitialize(device_handle); 17500a23bdaSmrg if (r) 17600a23bdaSmrg return CUE_SCLEAN_FAILED; 177d8807b2fSmrg 178d8807b2fSmrg return CUE_SUCCESS; 179d8807b2fSmrg} 180d8807b2fSmrg 181d8807b2fSmrgstatic int submit(unsigned ndw, unsigned ip) 182d8807b2fSmrg{ 183d8807b2fSmrg struct amdgpu_cs_request ibs_request = {0}; 184d8807b2fSmrg struct amdgpu_cs_ib_info ib_info = {0}; 185d8807b2fSmrg struct amdgpu_cs_fence fence_status = {0}; 186d8807b2fSmrg uint32_t expired; 187d8807b2fSmrg int r; 188d8807b2fSmrg 189d8807b2fSmrg ib_info.ib_mc_address = ib_mc_address; 190d8807b2fSmrg ib_info.size = ndw; 191d8807b2fSmrg 192d8807b2fSmrg ibs_request.ip_type = ip; 193d8807b2fSmrg 194d8807b2fSmrg r = amdgpu_bo_list_create(device_handle, num_resources, resources, 195d8807b2fSmrg NULL, &ibs_request.resources); 196d8807b2fSmrg if (r) 197d8807b2fSmrg return r; 198d8807b2fSmrg 199d8807b2fSmrg ibs_request.number_of_ibs = 1; 200d8807b2fSmrg ibs_request.ibs = &ib_info; 201d8807b2fSmrg ibs_request.fence_info.handle = NULL; 202d8807b2fSmrg 203d8807b2fSmrg r = amdgpu_cs_submit(context_handle, 0, &ibs_request, 1); 204d8807b2fSmrg if (r) 205d8807b2fSmrg return r; 206d8807b2fSmrg 207d8807b2fSmrg r = amdgpu_bo_list_destroy(ibs_request.resources); 208d8807b2fSmrg if (r) 209d8807b2fSmrg return r; 210d8807b2fSmrg 211d8807b2fSmrg fence_status.context = context_handle; 212d8807b2fSmrg fence_status.ip_type = ip; 213d8807b2fSmrg fence_status.fence = ibs_request.seq_no; 214d8807b2fSmrg 215d8807b2fSmrg r = amdgpu_cs_query_fence_status(&fence_status, 216d8807b2fSmrg AMDGPU_TIMEOUT_INFINITE, 217d8807b2fSmrg 0, &expired); 218d8807b2fSmrg if (r) 219d8807b2fSmrg return r; 220d8807b2fSmrg 221d8807b2fSmrg return 0; 222d8807b2fSmrg} 223d8807b2fSmrg 224d8807b2fSmrgstatic void alloc_resource(struct amdgpu_vcn_bo *vcn_bo, 225d8807b2fSmrg unsigned size, unsigned domain) 226d8807b2fSmrg{ 227d8807b2fSmrg struct amdgpu_bo_alloc_request req = {0}; 228d8807b2fSmrg amdgpu_bo_handle buf_handle; 229d8807b2fSmrg amdgpu_va_handle va_handle; 230d8807b2fSmrg uint64_t va = 0; 231d8807b2fSmrg int r; 232d8807b2fSmrg 233d8807b2fSmrg req.alloc_size = ALIGN(size, 4096); 234d8807b2fSmrg req.preferred_heap = domain; 235d8807b2fSmrg r = amdgpu_bo_alloc(device_handle, &req, &buf_handle); 236d8807b2fSmrg CU_ASSERT_EQUAL(r, 0); 237d8807b2fSmrg r = amdgpu_va_range_alloc(device_handle, 238d8807b2fSmrg amdgpu_gpu_va_range_general, 239d8807b2fSmrg req.alloc_size, 1, 0, &va, 240d8807b2fSmrg &va_handle, 0); 241d8807b2fSmrg CU_ASSERT_EQUAL(r, 0); 242d8807b2fSmrg r = amdgpu_bo_va_op(buf_handle, 0, req.alloc_size, va, 0, 243d8807b2fSmrg AMDGPU_VA_OP_MAP); 244d8807b2fSmrg CU_ASSERT_EQUAL(r, 0); 245d8807b2fSmrg vcn_bo->addr = va; 246d8807b2fSmrg vcn_bo->handle = buf_handle; 247d8807b2fSmrg vcn_bo->size = req.alloc_size; 248d8807b2fSmrg vcn_bo->va_handle = va_handle; 249d8807b2fSmrg r = amdgpu_bo_cpu_map(vcn_bo->handle, (void **)&vcn_bo->ptr); 250d8807b2fSmrg CU_ASSERT_EQUAL(r, 0); 251d8807b2fSmrg memset(vcn_bo->ptr, 0, size); 252d8807b2fSmrg r = amdgpu_bo_cpu_unmap(vcn_bo->handle); 253d8807b2fSmrg CU_ASSERT_EQUAL(r, 0); 254d8807b2fSmrg} 255d8807b2fSmrg 256d8807b2fSmrgstatic void free_resource(struct amdgpu_vcn_bo *vcn_bo) 257d8807b2fSmrg{ 258d8807b2fSmrg int r; 259d8807b2fSmrg 260d8807b2fSmrg r = amdgpu_bo_va_op(vcn_bo->handle, 0, vcn_bo->size, 261d8807b2fSmrg vcn_bo->addr, 0, AMDGPU_VA_OP_UNMAP); 262d8807b2fSmrg CU_ASSERT_EQUAL(r, 0); 263d8807b2fSmrg 264d8807b2fSmrg r = amdgpu_va_range_free(vcn_bo->va_handle); 265d8807b2fSmrg CU_ASSERT_EQUAL(r, 0); 266d8807b2fSmrg 267d8807b2fSmrg r = amdgpu_bo_free(vcn_bo->handle); 268d8807b2fSmrg CU_ASSERT_EQUAL(r, 0); 269d8807b2fSmrg memset(vcn_bo, 0, sizeof(*vcn_bo)); 270d8807b2fSmrg} 271d8807b2fSmrg 272d8807b2fSmrgstatic void vcn_dec_cmd(uint64_t addr, unsigned cmd, int *idx) 273d8807b2fSmrg{ 2745324fb0dSmrg ib_cpu[(*idx)++] = reg.data0; 275d8807b2fSmrg ib_cpu[(*idx)++] = addr; 2765324fb0dSmrg ib_cpu[(*idx)++] = reg.data1; 277d8807b2fSmrg ib_cpu[(*idx)++] = addr >> 32; 2785324fb0dSmrg ib_cpu[(*idx)++] = reg.cmd; 279d8807b2fSmrg ib_cpu[(*idx)++] = cmd << 1; 280d8807b2fSmrg} 281d8807b2fSmrg 282d8807b2fSmrgstatic void amdgpu_cs_vcn_dec_create(void) 283d8807b2fSmrg{ 284d8807b2fSmrg struct amdgpu_vcn_bo msg_buf; 285d8807b2fSmrg int len, r; 286d8807b2fSmrg 287d8807b2fSmrg num_resources = 0; 288d8807b2fSmrg alloc_resource(&msg_buf, 4096, AMDGPU_GEM_DOMAIN_GTT); 289d8807b2fSmrg resources[num_resources++] = msg_buf.handle; 290d8807b2fSmrg resources[num_resources++] = ib_handle; 291d8807b2fSmrg 292d8807b2fSmrg r = amdgpu_bo_cpu_map(msg_buf.handle, (void **)&msg_buf.ptr); 293d8807b2fSmrg CU_ASSERT_EQUAL(r, 0); 294d8807b2fSmrg 295d8807b2fSmrg memset(msg_buf.ptr, 0, 4096); 296d8807b2fSmrg memcpy(msg_buf.ptr, vcn_dec_create_msg, sizeof(vcn_dec_create_msg)); 297d8807b2fSmrg 298d8807b2fSmrg len = 0; 2995324fb0dSmrg ib_cpu[len++] = reg.data0; 300d8807b2fSmrg ib_cpu[len++] = msg_buf.addr; 3015324fb0dSmrg ib_cpu[len++] = reg.data1; 302d8807b2fSmrg ib_cpu[len++] = msg_buf.addr >> 32; 3035324fb0dSmrg ib_cpu[len++] = reg.cmd; 304d8807b2fSmrg ib_cpu[len++] = 0; 3056532f28eSmrg for (; len % 16; ) { 3065324fb0dSmrg ib_cpu[len++] = reg.nop; 3076532f28eSmrg ib_cpu[len++] = 0; 3086532f28eSmrg } 309d8807b2fSmrg 310d8807b2fSmrg r = submit(len, AMDGPU_HW_IP_VCN_DEC); 311d8807b2fSmrg CU_ASSERT_EQUAL(r, 0); 312d8807b2fSmrg 313d8807b2fSmrg free_resource(&msg_buf); 314d8807b2fSmrg} 315d8807b2fSmrg 316d8807b2fSmrgstatic void amdgpu_cs_vcn_dec_decode(void) 317d8807b2fSmrg{ 31800a23bdaSmrg const unsigned dpb_size = 15923584, dt_size = 737280; 319d8807b2fSmrg uint64_t msg_addr, fb_addr, bs_addr, dpb_addr, ctx_addr, dt_addr, it_addr, sum; 320d8807b2fSmrg struct amdgpu_vcn_bo dec_buf; 321d8807b2fSmrg int size, len, i, r; 322d8807b2fSmrg uint8_t *dec; 323d8807b2fSmrg 324d8807b2fSmrg size = 4*1024; /* msg */ 325d8807b2fSmrg size += 4*1024; /* fb */ 326d8807b2fSmrg size += 4096; /*it_scaling_table*/ 327d8807b2fSmrg size += ALIGN(sizeof(uvd_bitstream), 4*1024); 328d8807b2fSmrg size += ALIGN(dpb_size, 4*1024); 329d8807b2fSmrg size += ALIGN(dt_size, 4*1024); 330d8807b2fSmrg 331d8807b2fSmrg num_resources = 0; 332d8807b2fSmrg alloc_resource(&dec_buf, size, AMDGPU_GEM_DOMAIN_GTT); 333d8807b2fSmrg resources[num_resources++] = dec_buf.handle; 334d8807b2fSmrg resources[num_resources++] = ib_handle; 335d8807b2fSmrg 336d8807b2fSmrg r = amdgpu_bo_cpu_map(dec_buf.handle, (void **)&dec_buf.ptr); 337d8807b2fSmrg dec = dec_buf.ptr; 338d8807b2fSmrg 339d8807b2fSmrg CU_ASSERT_EQUAL(r, 0); 340d8807b2fSmrg memset(dec_buf.ptr, 0, size); 341d8807b2fSmrg memcpy(dec_buf.ptr, vcn_dec_decode_msg, sizeof(vcn_dec_decode_msg)); 342d8807b2fSmrg memcpy(dec_buf.ptr + sizeof(vcn_dec_decode_msg), 343d8807b2fSmrg avc_decode_msg, sizeof(avc_decode_msg)); 344d8807b2fSmrg 345d8807b2fSmrg dec += 4*1024; 3469bd392adSmrg memcpy(dec, feedback_msg, sizeof(feedback_msg)); 347d8807b2fSmrg dec += 4*1024; 348d8807b2fSmrg memcpy(dec, uvd_it_scaling_table, sizeof(uvd_it_scaling_table)); 349d8807b2fSmrg 350d8807b2fSmrg dec += 4*1024; 351d8807b2fSmrg memcpy(dec, uvd_bitstream, sizeof(uvd_bitstream)); 352d8807b2fSmrg 353d8807b2fSmrg dec += ALIGN(sizeof(uvd_bitstream), 4*1024); 354d8807b2fSmrg 355d8807b2fSmrg dec += ALIGN(dpb_size, 4*1024); 356d8807b2fSmrg 357d8807b2fSmrg msg_addr = dec_buf.addr; 358d8807b2fSmrg fb_addr = msg_addr + 4*1024; 359d8807b2fSmrg it_addr = fb_addr + 4*1024; 360d8807b2fSmrg bs_addr = it_addr + 4*1024; 361d8807b2fSmrg dpb_addr = ALIGN(bs_addr + sizeof(uvd_bitstream), 4*1024); 362d8807b2fSmrg ctx_addr = ALIGN(dpb_addr + 0x006B9400, 4*1024); 363d8807b2fSmrg dt_addr = ALIGN(dpb_addr + dpb_size, 4*1024); 364d8807b2fSmrg 365d8807b2fSmrg len = 0; 366d8807b2fSmrg vcn_dec_cmd(msg_addr, 0x0, &len); 367d8807b2fSmrg vcn_dec_cmd(dpb_addr, 0x1, &len); 368d8807b2fSmrg vcn_dec_cmd(dt_addr, 0x2, &len); 369d8807b2fSmrg vcn_dec_cmd(fb_addr, 0x3, &len); 370d8807b2fSmrg vcn_dec_cmd(bs_addr, 0x100, &len); 371d8807b2fSmrg vcn_dec_cmd(it_addr, 0x204, &len); 372d8807b2fSmrg vcn_dec_cmd(ctx_addr, 0x206, &len); 373d8807b2fSmrg 3745324fb0dSmrg ib_cpu[len++] = reg.cntl; 375d8807b2fSmrg ib_cpu[len++] = 0x1; 3766532f28eSmrg for (; len % 16; ) { 3775324fb0dSmrg ib_cpu[len++] = reg.nop; 3786532f28eSmrg ib_cpu[len++] = 0; 3796532f28eSmrg } 380d8807b2fSmrg 381d8807b2fSmrg r = submit(len, AMDGPU_HW_IP_VCN_DEC); 382d8807b2fSmrg CU_ASSERT_EQUAL(r, 0); 383d8807b2fSmrg 384d8807b2fSmrg for (i = 0, sum = 0; i < dt_size; ++i) 385d8807b2fSmrg sum += dec[i]; 386d8807b2fSmrg 387d8807b2fSmrg CU_ASSERT_EQUAL(sum, SUM_DECODE); 388d8807b2fSmrg 389d8807b2fSmrg free_resource(&dec_buf); 390d8807b2fSmrg} 391d8807b2fSmrg 392d8807b2fSmrgstatic void amdgpu_cs_vcn_dec_destroy(void) 393d8807b2fSmrg{ 394d8807b2fSmrg struct amdgpu_vcn_bo msg_buf; 395d8807b2fSmrg int len, r; 396d8807b2fSmrg 397d8807b2fSmrg num_resources = 0; 398d8807b2fSmrg alloc_resource(&msg_buf, 1024, AMDGPU_GEM_DOMAIN_GTT); 399d8807b2fSmrg resources[num_resources++] = msg_buf.handle; 400d8807b2fSmrg resources[num_resources++] = ib_handle; 401d8807b2fSmrg 402d8807b2fSmrg r = amdgpu_bo_cpu_map(msg_buf.handle, (void **)&msg_buf.ptr); 403d8807b2fSmrg CU_ASSERT_EQUAL(r, 0); 404d8807b2fSmrg 405d8807b2fSmrg memset(msg_buf.ptr, 0, 1024); 406d8807b2fSmrg memcpy(msg_buf.ptr, vcn_dec_destroy_msg, sizeof(vcn_dec_destroy_msg)); 407d8807b2fSmrg 408d8807b2fSmrg len = 0; 4095324fb0dSmrg ib_cpu[len++] = reg.data0; 410d8807b2fSmrg ib_cpu[len++] = msg_buf.addr; 4115324fb0dSmrg ib_cpu[len++] = reg.data1; 412d8807b2fSmrg ib_cpu[len++] = msg_buf.addr >> 32; 4135324fb0dSmrg ib_cpu[len++] = reg.cmd; 414d8807b2fSmrg ib_cpu[len++] = 0; 4156532f28eSmrg for (; len % 16; ) { 4165324fb0dSmrg ib_cpu[len++] = reg.nop; 4176532f28eSmrg ib_cpu[len++] = 0; 4186532f28eSmrg } 419d8807b2fSmrg 420d8807b2fSmrg r = submit(len, AMDGPU_HW_IP_VCN_DEC); 421d8807b2fSmrg CU_ASSERT_EQUAL(r, 0); 422d8807b2fSmrg 423d8807b2fSmrg free_resource(&msg_buf); 424d8807b2fSmrg} 425d8807b2fSmrg 426d8807b2fSmrgstatic void amdgpu_cs_vcn_enc_create(void) 427d8807b2fSmrg{ 428d8807b2fSmrg /* TODO */ 429d8807b2fSmrg} 430d8807b2fSmrg 431d8807b2fSmrgstatic void amdgpu_cs_vcn_enc_encode(void) 432d8807b2fSmrg{ 433d8807b2fSmrg /* TODO */ 434d8807b2fSmrg} 435d8807b2fSmrg 436d8807b2fSmrgstatic void amdgpu_cs_vcn_enc_destroy(void) 437d8807b2fSmrg{ 438d8807b2fSmrg /* TODO */ 439d8807b2fSmrg} 440