vcn_tests.c revision 41687f09
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; 5941687f09Smrgstatic uint32_t chip_rev; 6041687f09Smrgstatic uint32_t chip_id; 619bd392adSmrgstatic uint32_t asic_id; 6241687f09Smrgstatic uint32_t chip_rev; 6341687f09Smrgstatic uint32_t chip_id; 64d8807b2fSmrg 65d8807b2fSmrgstatic amdgpu_context_handle context_handle; 66d8807b2fSmrgstatic amdgpu_bo_handle ib_handle; 67d8807b2fSmrgstatic amdgpu_va_handle ib_va_handle; 68d8807b2fSmrgstatic uint64_t ib_mc_address; 69d8807b2fSmrgstatic uint32_t *ib_cpu; 70d8807b2fSmrg 71d8807b2fSmrgstatic amdgpu_bo_handle resources[MAX_RESOURCES]; 72d8807b2fSmrgstatic unsigned num_resources; 735324fb0dSmrgstatic struct amdgpu_vcn_reg reg; 74d8807b2fSmrg 75d8807b2fSmrgstatic void amdgpu_cs_vcn_dec_create(void); 76d8807b2fSmrgstatic void amdgpu_cs_vcn_dec_decode(void); 77d8807b2fSmrgstatic void amdgpu_cs_vcn_dec_destroy(void); 78d8807b2fSmrg 79d8807b2fSmrgstatic void amdgpu_cs_vcn_enc_create(void); 80d8807b2fSmrgstatic void amdgpu_cs_vcn_enc_encode(void); 81d8807b2fSmrgstatic void amdgpu_cs_vcn_enc_destroy(void); 82d8807b2fSmrg 83d8807b2fSmrgCU_TestInfo vcn_tests[] = { 84d8807b2fSmrg 85d8807b2fSmrg { "VCN DEC create", amdgpu_cs_vcn_dec_create }, 86d8807b2fSmrg { "VCN DEC decode", amdgpu_cs_vcn_dec_decode }, 87d8807b2fSmrg { "VCN DEC destroy", amdgpu_cs_vcn_dec_destroy }, 88d8807b2fSmrg 89d8807b2fSmrg { "VCN ENC create", amdgpu_cs_vcn_enc_create }, 90d8807b2fSmrg { "VCN ENC decode", amdgpu_cs_vcn_enc_encode }, 91d8807b2fSmrg { "VCN ENC destroy", amdgpu_cs_vcn_enc_destroy }, 92d8807b2fSmrg CU_TEST_INFO_NULL, 93d8807b2fSmrg}; 94d8807b2fSmrg 9500a23bdaSmrgCU_BOOL suite_vcn_tests_enable(void) 9600a23bdaSmrg{ 9741687f09Smrg struct drm_amdgpu_info_hw_ip info; 9841687f09Smrg int r; 9900a23bdaSmrg 10000a23bdaSmrg if (amdgpu_device_initialize(drm_amdgpu[0], &major_version, 10100a23bdaSmrg &minor_version, &device_handle)) 10200a23bdaSmrg return CU_FALSE; 10300a23bdaSmrg 10400a23bdaSmrg family_id = device_handle->info.family_id; 1059bd392adSmrg asic_id = device_handle->info.asic_id; 10641687f09Smrg chip_rev = device_handle->info.chip_rev; 10741687f09Smrg chip_id = device_handle->info.chip_external_rev; 10841687f09Smrg 10941687f09Smrg r = amdgpu_query_hw_ip_info(device_handle, AMDGPU_HW_IP_VCN_DEC, 0, &info); 11000a23bdaSmrg 11100a23bdaSmrg if (amdgpu_device_deinitialize(device_handle)) 11200a23bdaSmrg return CU_FALSE; 11300a23bdaSmrg 11441687f09Smrg if (r != 0 || !info.available_rings || 11541687f09Smrg (family_id < AMDGPU_FAMILY_RV && 11641687f09Smrg (family_id == AMDGPU_FAMILY_AI && 11741687f09Smrg chip_id != (chip_rev + 0x32)))) { /* Arcturus */ 11800a23bdaSmrg printf("\n\nThe ASIC NOT support VCN, suite disabled\n"); 11900a23bdaSmrg return CU_FALSE; 12000a23bdaSmrg } 12100a23bdaSmrg 12241687f09Smrg if (family_id == AMDGPU_FAMILY_AI) { 12341687f09Smrg amdgpu_set_test_active("VCN Tests", "VCN ENC create", CU_FALSE); 12441687f09Smrg amdgpu_set_test_active("VCN Tests", "VCN ENC decode", CU_FALSE); 12541687f09Smrg amdgpu_set_test_active("VCN Tests", "VCN ENC destroy", CU_FALSE); 12641687f09Smrg } 12741687f09Smrg 1285324fb0dSmrg if (family_id == AMDGPU_FAMILY_RV) { 12941687f09Smrg if (chip_id >= (chip_rev + 0x91)) { 1309bd392adSmrg reg.data0 = 0x504; 1319bd392adSmrg reg.data1 = 0x505; 1329bd392adSmrg reg.cmd = 0x503; 1339bd392adSmrg reg.nop = 0x53f; 1349bd392adSmrg reg.cntl = 0x506; 1359bd392adSmrg } else { 1369bd392adSmrg reg.data0 = 0x81c4; 1379bd392adSmrg reg.data1 = 0x81c5; 1389bd392adSmrg reg.cmd = 0x81c3; 1399bd392adSmrg reg.nop = 0x81ff; 1409bd392adSmrg reg.cntl = 0x81c6; 1419bd392adSmrg } 1425324fb0dSmrg } else if (family_id == AMDGPU_FAMILY_NV) { 14341687f09Smrg if (chip_id == (chip_rev + 0x28) || 14441687f09Smrg chip_id == (chip_rev + 0x32) || 14541687f09Smrg chip_id == (chip_rev + 0x3c)) { 14641687f09Smrg reg.data0 = 0x10; 14741687f09Smrg reg.data1 = 0x11; 14841687f09Smrg reg.cmd = 0xf; 14941687f09Smrg reg.nop = 0x29; 15041687f09Smrg reg.cntl = 0x26d; 15141687f09Smrg } 15241687f09Smrg else { 15341687f09Smrg reg.data0 = 0x504; 15441687f09Smrg reg.data1 = 0x505; 15541687f09Smrg reg.cmd = 0x503; 15641687f09Smrg reg.nop = 0x53f; 15741687f09Smrg reg.cntl = 0x506; 15841687f09Smrg } 15941687f09Smrg } else if (family_id == AMDGPU_FAMILY_AI) { 16041687f09Smrg reg.data0 = 0x10; 16141687f09Smrg reg.data1 = 0x11; 16241687f09Smrg reg.cmd = 0xf; 16341687f09Smrg reg.nop = 0x29; 16441687f09Smrg reg.cntl = 0x26d; 1655324fb0dSmrg } else 1665324fb0dSmrg return CU_FALSE; 1675324fb0dSmrg 16800a23bdaSmrg return CU_TRUE; 16900a23bdaSmrg} 17000a23bdaSmrg 171d8807b2fSmrgint suite_vcn_tests_init(void) 172d8807b2fSmrg{ 173d8807b2fSmrg int r; 174d8807b2fSmrg 175d8807b2fSmrg r = amdgpu_device_initialize(drm_amdgpu[0], &major_version, 176d8807b2fSmrg &minor_version, &device_handle); 177d8807b2fSmrg if (r) 178d8807b2fSmrg return CUE_SINIT_FAILED; 179d8807b2fSmrg 180d8807b2fSmrg family_id = device_handle->info.family_id; 181d8807b2fSmrg 182d8807b2fSmrg r = amdgpu_cs_ctx_create(device_handle, &context_handle); 183d8807b2fSmrg if (r) 184d8807b2fSmrg return CUE_SINIT_FAILED; 185d8807b2fSmrg 186d8807b2fSmrg r = amdgpu_bo_alloc_and_map(device_handle, IB_SIZE, 4096, 187d8807b2fSmrg AMDGPU_GEM_DOMAIN_GTT, 0, 188d8807b2fSmrg &ib_handle, (void**)&ib_cpu, 189d8807b2fSmrg &ib_mc_address, &ib_va_handle); 190d8807b2fSmrg if (r) 191d8807b2fSmrg return CUE_SINIT_FAILED; 192d8807b2fSmrg 193d8807b2fSmrg return CUE_SUCCESS; 194d8807b2fSmrg} 195d8807b2fSmrg 196d8807b2fSmrgint suite_vcn_tests_clean(void) 197d8807b2fSmrg{ 198d8807b2fSmrg int r; 199d8807b2fSmrg 20000a23bdaSmrg r = amdgpu_bo_unmap_and_free(ib_handle, ib_va_handle, 20100a23bdaSmrg ib_mc_address, IB_SIZE); 20200a23bdaSmrg if (r) 20300a23bdaSmrg return CUE_SCLEAN_FAILED; 20400a23bdaSmrg 20500a23bdaSmrg r = amdgpu_cs_ctx_free(context_handle); 20600a23bdaSmrg if (r) 20700a23bdaSmrg return CUE_SCLEAN_FAILED; 20800a23bdaSmrg 20900a23bdaSmrg r = amdgpu_device_deinitialize(device_handle); 21000a23bdaSmrg if (r) 21100a23bdaSmrg return CUE_SCLEAN_FAILED; 212d8807b2fSmrg 213d8807b2fSmrg return CUE_SUCCESS; 214d8807b2fSmrg} 215d8807b2fSmrg 216d8807b2fSmrgstatic int submit(unsigned ndw, unsigned ip) 217d8807b2fSmrg{ 218d8807b2fSmrg struct amdgpu_cs_request ibs_request = {0}; 219d8807b2fSmrg struct amdgpu_cs_ib_info ib_info = {0}; 220d8807b2fSmrg struct amdgpu_cs_fence fence_status = {0}; 221d8807b2fSmrg uint32_t expired; 222d8807b2fSmrg int r; 223d8807b2fSmrg 224d8807b2fSmrg ib_info.ib_mc_address = ib_mc_address; 225d8807b2fSmrg ib_info.size = ndw; 226d8807b2fSmrg 227d8807b2fSmrg ibs_request.ip_type = ip; 228d8807b2fSmrg 229d8807b2fSmrg r = amdgpu_bo_list_create(device_handle, num_resources, resources, 230d8807b2fSmrg NULL, &ibs_request.resources); 231d8807b2fSmrg if (r) 232d8807b2fSmrg return r; 233d8807b2fSmrg 234d8807b2fSmrg ibs_request.number_of_ibs = 1; 235d8807b2fSmrg ibs_request.ibs = &ib_info; 236d8807b2fSmrg ibs_request.fence_info.handle = NULL; 237d8807b2fSmrg 238d8807b2fSmrg r = amdgpu_cs_submit(context_handle, 0, &ibs_request, 1); 239d8807b2fSmrg if (r) 240d8807b2fSmrg return r; 241d8807b2fSmrg 242d8807b2fSmrg r = amdgpu_bo_list_destroy(ibs_request.resources); 243d8807b2fSmrg if (r) 244d8807b2fSmrg return r; 245d8807b2fSmrg 246d8807b2fSmrg fence_status.context = context_handle; 247d8807b2fSmrg fence_status.ip_type = ip; 248d8807b2fSmrg fence_status.fence = ibs_request.seq_no; 249d8807b2fSmrg 250d8807b2fSmrg r = amdgpu_cs_query_fence_status(&fence_status, 251d8807b2fSmrg AMDGPU_TIMEOUT_INFINITE, 252d8807b2fSmrg 0, &expired); 253d8807b2fSmrg if (r) 254d8807b2fSmrg return r; 255d8807b2fSmrg 256d8807b2fSmrg return 0; 257d8807b2fSmrg} 258d8807b2fSmrg 259d8807b2fSmrgstatic void alloc_resource(struct amdgpu_vcn_bo *vcn_bo, 260d8807b2fSmrg unsigned size, unsigned domain) 261d8807b2fSmrg{ 262d8807b2fSmrg struct amdgpu_bo_alloc_request req = {0}; 263d8807b2fSmrg amdgpu_bo_handle buf_handle; 264d8807b2fSmrg amdgpu_va_handle va_handle; 265d8807b2fSmrg uint64_t va = 0; 266d8807b2fSmrg int r; 267d8807b2fSmrg 268d8807b2fSmrg req.alloc_size = ALIGN(size, 4096); 269d8807b2fSmrg req.preferred_heap = domain; 270d8807b2fSmrg r = amdgpu_bo_alloc(device_handle, &req, &buf_handle); 271d8807b2fSmrg CU_ASSERT_EQUAL(r, 0); 272d8807b2fSmrg r = amdgpu_va_range_alloc(device_handle, 273d8807b2fSmrg amdgpu_gpu_va_range_general, 274d8807b2fSmrg req.alloc_size, 1, 0, &va, 275d8807b2fSmrg &va_handle, 0); 276d8807b2fSmrg CU_ASSERT_EQUAL(r, 0); 277d8807b2fSmrg r = amdgpu_bo_va_op(buf_handle, 0, req.alloc_size, va, 0, 278d8807b2fSmrg AMDGPU_VA_OP_MAP); 279d8807b2fSmrg CU_ASSERT_EQUAL(r, 0); 280d8807b2fSmrg vcn_bo->addr = va; 281d8807b2fSmrg vcn_bo->handle = buf_handle; 282d8807b2fSmrg vcn_bo->size = req.alloc_size; 283d8807b2fSmrg vcn_bo->va_handle = va_handle; 284d8807b2fSmrg r = amdgpu_bo_cpu_map(vcn_bo->handle, (void **)&vcn_bo->ptr); 285d8807b2fSmrg CU_ASSERT_EQUAL(r, 0); 286d8807b2fSmrg memset(vcn_bo->ptr, 0, size); 287d8807b2fSmrg r = amdgpu_bo_cpu_unmap(vcn_bo->handle); 288d8807b2fSmrg CU_ASSERT_EQUAL(r, 0); 289d8807b2fSmrg} 290d8807b2fSmrg 291d8807b2fSmrgstatic void free_resource(struct amdgpu_vcn_bo *vcn_bo) 292d8807b2fSmrg{ 293d8807b2fSmrg int r; 294d8807b2fSmrg 295d8807b2fSmrg r = amdgpu_bo_va_op(vcn_bo->handle, 0, vcn_bo->size, 296d8807b2fSmrg vcn_bo->addr, 0, AMDGPU_VA_OP_UNMAP); 297d8807b2fSmrg CU_ASSERT_EQUAL(r, 0); 298d8807b2fSmrg 299d8807b2fSmrg r = amdgpu_va_range_free(vcn_bo->va_handle); 300d8807b2fSmrg CU_ASSERT_EQUAL(r, 0); 301d8807b2fSmrg 302d8807b2fSmrg r = amdgpu_bo_free(vcn_bo->handle); 303d8807b2fSmrg CU_ASSERT_EQUAL(r, 0); 304d8807b2fSmrg memset(vcn_bo, 0, sizeof(*vcn_bo)); 305d8807b2fSmrg} 306d8807b2fSmrg 307d8807b2fSmrgstatic void vcn_dec_cmd(uint64_t addr, unsigned cmd, int *idx) 308d8807b2fSmrg{ 3095324fb0dSmrg ib_cpu[(*idx)++] = reg.data0; 310d8807b2fSmrg ib_cpu[(*idx)++] = addr; 3115324fb0dSmrg ib_cpu[(*idx)++] = reg.data1; 312d8807b2fSmrg ib_cpu[(*idx)++] = addr >> 32; 3135324fb0dSmrg ib_cpu[(*idx)++] = reg.cmd; 314d8807b2fSmrg ib_cpu[(*idx)++] = cmd << 1; 315d8807b2fSmrg} 316d8807b2fSmrg 317d8807b2fSmrgstatic void amdgpu_cs_vcn_dec_create(void) 318d8807b2fSmrg{ 319d8807b2fSmrg struct amdgpu_vcn_bo msg_buf; 320d8807b2fSmrg int len, r; 321d8807b2fSmrg 322d8807b2fSmrg num_resources = 0; 323d8807b2fSmrg alloc_resource(&msg_buf, 4096, AMDGPU_GEM_DOMAIN_GTT); 324d8807b2fSmrg resources[num_resources++] = msg_buf.handle; 325d8807b2fSmrg resources[num_resources++] = ib_handle; 326d8807b2fSmrg 327d8807b2fSmrg r = amdgpu_bo_cpu_map(msg_buf.handle, (void **)&msg_buf.ptr); 328d8807b2fSmrg CU_ASSERT_EQUAL(r, 0); 329d8807b2fSmrg 330d8807b2fSmrg memset(msg_buf.ptr, 0, 4096); 331d8807b2fSmrg memcpy(msg_buf.ptr, vcn_dec_create_msg, sizeof(vcn_dec_create_msg)); 332d8807b2fSmrg 333d8807b2fSmrg len = 0; 3345324fb0dSmrg ib_cpu[len++] = reg.data0; 335d8807b2fSmrg ib_cpu[len++] = msg_buf.addr; 3365324fb0dSmrg ib_cpu[len++] = reg.data1; 337d8807b2fSmrg ib_cpu[len++] = msg_buf.addr >> 32; 3385324fb0dSmrg ib_cpu[len++] = reg.cmd; 339d8807b2fSmrg ib_cpu[len++] = 0; 3406532f28eSmrg for (; len % 16; ) { 3415324fb0dSmrg ib_cpu[len++] = reg.nop; 3426532f28eSmrg ib_cpu[len++] = 0; 3436532f28eSmrg } 344d8807b2fSmrg 345d8807b2fSmrg r = submit(len, AMDGPU_HW_IP_VCN_DEC); 346d8807b2fSmrg CU_ASSERT_EQUAL(r, 0); 347d8807b2fSmrg 348d8807b2fSmrg free_resource(&msg_buf); 349d8807b2fSmrg} 350d8807b2fSmrg 351d8807b2fSmrgstatic void amdgpu_cs_vcn_dec_decode(void) 352d8807b2fSmrg{ 35300a23bdaSmrg const unsigned dpb_size = 15923584, dt_size = 737280; 354d8807b2fSmrg uint64_t msg_addr, fb_addr, bs_addr, dpb_addr, ctx_addr, dt_addr, it_addr, sum; 355d8807b2fSmrg struct amdgpu_vcn_bo dec_buf; 356d8807b2fSmrg int size, len, i, r; 357d8807b2fSmrg uint8_t *dec; 358d8807b2fSmrg 359d8807b2fSmrg size = 4*1024; /* msg */ 360d8807b2fSmrg size += 4*1024; /* fb */ 361d8807b2fSmrg size += 4096; /*it_scaling_table*/ 362d8807b2fSmrg size += ALIGN(sizeof(uvd_bitstream), 4*1024); 363d8807b2fSmrg size += ALIGN(dpb_size, 4*1024); 364d8807b2fSmrg size += ALIGN(dt_size, 4*1024); 365d8807b2fSmrg 366d8807b2fSmrg num_resources = 0; 367d8807b2fSmrg alloc_resource(&dec_buf, size, AMDGPU_GEM_DOMAIN_GTT); 368d8807b2fSmrg resources[num_resources++] = dec_buf.handle; 369d8807b2fSmrg resources[num_resources++] = ib_handle; 370d8807b2fSmrg 371d8807b2fSmrg r = amdgpu_bo_cpu_map(dec_buf.handle, (void **)&dec_buf.ptr); 372d8807b2fSmrg dec = dec_buf.ptr; 373d8807b2fSmrg 374d8807b2fSmrg CU_ASSERT_EQUAL(r, 0); 375d8807b2fSmrg memset(dec_buf.ptr, 0, size); 376d8807b2fSmrg memcpy(dec_buf.ptr, vcn_dec_decode_msg, sizeof(vcn_dec_decode_msg)); 377d8807b2fSmrg memcpy(dec_buf.ptr + sizeof(vcn_dec_decode_msg), 378d8807b2fSmrg avc_decode_msg, sizeof(avc_decode_msg)); 379d8807b2fSmrg 380d8807b2fSmrg dec += 4*1024; 3819bd392adSmrg memcpy(dec, feedback_msg, sizeof(feedback_msg)); 382d8807b2fSmrg dec += 4*1024; 383d8807b2fSmrg memcpy(dec, uvd_it_scaling_table, sizeof(uvd_it_scaling_table)); 384d8807b2fSmrg 385d8807b2fSmrg dec += 4*1024; 386d8807b2fSmrg memcpy(dec, uvd_bitstream, sizeof(uvd_bitstream)); 387d8807b2fSmrg 388d8807b2fSmrg dec += ALIGN(sizeof(uvd_bitstream), 4*1024); 389d8807b2fSmrg 390d8807b2fSmrg dec += ALIGN(dpb_size, 4*1024); 391d8807b2fSmrg 392d8807b2fSmrg msg_addr = dec_buf.addr; 393d8807b2fSmrg fb_addr = msg_addr + 4*1024; 394d8807b2fSmrg it_addr = fb_addr + 4*1024; 395d8807b2fSmrg bs_addr = it_addr + 4*1024; 396d8807b2fSmrg dpb_addr = ALIGN(bs_addr + sizeof(uvd_bitstream), 4*1024); 397d8807b2fSmrg ctx_addr = ALIGN(dpb_addr + 0x006B9400, 4*1024); 398d8807b2fSmrg dt_addr = ALIGN(dpb_addr + dpb_size, 4*1024); 399d8807b2fSmrg 400d8807b2fSmrg len = 0; 401d8807b2fSmrg vcn_dec_cmd(msg_addr, 0x0, &len); 402d8807b2fSmrg vcn_dec_cmd(dpb_addr, 0x1, &len); 403d8807b2fSmrg vcn_dec_cmd(dt_addr, 0x2, &len); 404d8807b2fSmrg vcn_dec_cmd(fb_addr, 0x3, &len); 405d8807b2fSmrg vcn_dec_cmd(bs_addr, 0x100, &len); 406d8807b2fSmrg vcn_dec_cmd(it_addr, 0x204, &len); 407d8807b2fSmrg vcn_dec_cmd(ctx_addr, 0x206, &len); 408d8807b2fSmrg 4095324fb0dSmrg ib_cpu[len++] = reg.cntl; 410d8807b2fSmrg ib_cpu[len++] = 0x1; 4116532f28eSmrg for (; len % 16; ) { 4125324fb0dSmrg ib_cpu[len++] = reg.nop; 4136532f28eSmrg ib_cpu[len++] = 0; 4146532f28eSmrg } 415d8807b2fSmrg 416d8807b2fSmrg r = submit(len, AMDGPU_HW_IP_VCN_DEC); 417d8807b2fSmrg CU_ASSERT_EQUAL(r, 0); 418d8807b2fSmrg 419d8807b2fSmrg for (i = 0, sum = 0; i < dt_size; ++i) 420d8807b2fSmrg sum += dec[i]; 421d8807b2fSmrg 422d8807b2fSmrg CU_ASSERT_EQUAL(sum, SUM_DECODE); 423d8807b2fSmrg 424d8807b2fSmrg free_resource(&dec_buf); 425d8807b2fSmrg} 426d8807b2fSmrg 427d8807b2fSmrgstatic void amdgpu_cs_vcn_dec_destroy(void) 428d8807b2fSmrg{ 429d8807b2fSmrg struct amdgpu_vcn_bo msg_buf; 430d8807b2fSmrg int len, r; 431d8807b2fSmrg 432d8807b2fSmrg num_resources = 0; 433d8807b2fSmrg alloc_resource(&msg_buf, 1024, AMDGPU_GEM_DOMAIN_GTT); 434d8807b2fSmrg resources[num_resources++] = msg_buf.handle; 435d8807b2fSmrg resources[num_resources++] = ib_handle; 436d8807b2fSmrg 437d8807b2fSmrg r = amdgpu_bo_cpu_map(msg_buf.handle, (void **)&msg_buf.ptr); 438d8807b2fSmrg CU_ASSERT_EQUAL(r, 0); 439d8807b2fSmrg 440d8807b2fSmrg memset(msg_buf.ptr, 0, 1024); 441d8807b2fSmrg memcpy(msg_buf.ptr, vcn_dec_destroy_msg, sizeof(vcn_dec_destroy_msg)); 442d8807b2fSmrg 443d8807b2fSmrg len = 0; 4445324fb0dSmrg ib_cpu[len++] = reg.data0; 445d8807b2fSmrg ib_cpu[len++] = msg_buf.addr; 4465324fb0dSmrg ib_cpu[len++] = reg.data1; 447d8807b2fSmrg ib_cpu[len++] = msg_buf.addr >> 32; 4485324fb0dSmrg ib_cpu[len++] = reg.cmd; 449d8807b2fSmrg ib_cpu[len++] = 0; 4506532f28eSmrg for (; len % 16; ) { 4515324fb0dSmrg ib_cpu[len++] = reg.nop; 4526532f28eSmrg ib_cpu[len++] = 0; 4536532f28eSmrg } 454d8807b2fSmrg 455d8807b2fSmrg r = submit(len, AMDGPU_HW_IP_VCN_DEC); 456d8807b2fSmrg CU_ASSERT_EQUAL(r, 0); 457d8807b2fSmrg 458d8807b2fSmrg free_resource(&msg_buf); 459d8807b2fSmrg} 460d8807b2fSmrg 461d8807b2fSmrgstatic void amdgpu_cs_vcn_enc_create(void) 462d8807b2fSmrg{ 463d8807b2fSmrg /* TODO */ 464d8807b2fSmrg} 465d8807b2fSmrg 466d8807b2fSmrgstatic void amdgpu_cs_vcn_enc_encode(void) 467d8807b2fSmrg{ 468d8807b2fSmrg /* TODO */ 469d8807b2fSmrg} 470d8807b2fSmrg 471d8807b2fSmrgstatic void amdgpu_cs_vcn_enc_destroy(void) 472d8807b2fSmrg{ 473d8807b2fSmrg /* TODO */ 474d8807b2fSmrg} 475