DF-4566 / static_proof.txt
sys/dev/drm/amd/amdgpu/amdgpu_vce.h:66:int amdgpu_vce_ring_parse_cs(struct amdgpu_cs_parser *p, uint32_t ib_idx);
sys/dev/drm/amd/amdgpu/amdgpu_vce.h:67:int amdgpu_vce_ring_parse_cs_vm(struct amdgpu_cs_parser *p, uint32_t ib_idx);
sys/dev/drm/amd/amdgpu/amdgpu_uvd.h:81:int amdgpu_uvd_ring_parse_cs(struct amdgpu_cs_parser *parser, uint32_t ib_idx);
sys/dev/drm/amd/amdgpu/amdgpu_ring.h:125: int (*parse_cs)(struct amdgpu_cs_parser *p, uint32_t ib_idx);
sys/dev/drm/amd/amdgpu/amdgpu_ring.h:126: int (*patch_cs_in_place)(struct amdgpu_cs_parser *p, uint32_t ib_idx);
sys/dev/drm/amd/amdgpu/amdgpu_ring.h:225:#define amdgpu_ring_parse_cs(r, p, ib) ((r)->funcs->parse_cs((p), (ib)))
sys/dev/drm/amd/amdgpu/amdgpu_ring.h:226:#define amdgpu_ring_patch_cs_in_place(r, p, ib) ((r)->funcs->patch_cs_in_place((p), (ib)))
sys/dev/drm/amd/amdgpu/vce_v4_0.c:1077: .parse_cs = amdgpu_vce_ring_parse_cs_vm,
sys/dev/drm/amd/amdgpu/vce_v3_0.c:902: .parse_cs = amdgpu_vce_ring_parse_cs,
sys/dev/drm/amd/amdgpu/vce_v3_0.c:925: .parse_cs = amdgpu_vce_ring_parse_cs_vm,
sys/dev/drm/amd/amdgpu/vce_v2_0.c:615: .parse_cs = amdgpu_vce_ring_parse_cs,
sys/dev/drm/amd/amdgpu/uvd_v6_0.c:1530: .parse_cs = amdgpu_uvd_ring_parse_cs,
sys/dev/drm/amd/amdgpu/uvd_v7_0.c:1266: * uvd_v7_0_ring_patch_cs_in_place - Patch the IB for command submission.
sys/dev/drm/amd/amdgpu/uvd_v7_0.c:1272:static int uvd_v7_0_ring_patch_cs_in_place(struct amdgpu_cs_parser *p,
sys/dev/drm/amd/amdgpu/uvd_v7_0.c:1786: .patch_cs_in_place = uvd_v7_0_ring_patch_cs_in_place,
sys/dev/drm/amd/amdgpu/uvd_v5_0.c:865: .parse_cs = amdgpu_uvd_ring_parse_cs,
sys/dev/drm/amd/amdgpu/uvd_v4_2.c:756: .parse_cs = amdgpu_uvd_ring_parse_cs,
sys/dev/drm/amd/amdgpu/amdgpu_vce.c:708:int amdgpu_vce_ring_parse_cs(struct amdgpu_cs_parser *p, uint32_t ib_idx)
sys/dev/drm/amd/amdgpu/amdgpu_vce.c:944:int amdgpu_vce_ring_parse_cs_vm(struct amdgpu_cs_parser *p, uint32_t ib_idx)
sys/dev/drm/amd/amdgpu/amdgpu_uvd.c:964: * amdgpu_uvd_ring_parse_cs - UVD command submission parser
sys/dev/drm/amd/amdgpu/amdgpu_uvd.c:970:int amdgpu_uvd_ring_parse_cs(struct amdgpu_cs_parser *parser, uint32_t ib_idx)
sys/dev/drm/amd/amdgpu/amdgpu_cs.c:834: if (ring->funcs->parse_cs || ring->funcs->patch_cs_in_place) {
sys/dev/drm/amd/amdgpu/amdgpu_cs.c:875: if (ring->funcs->parse_cs) {
sys/dev/drm/amd/amdgpu/amdgpu_cs.c:879: r = amdgpu_ring_parse_cs(ring, p, j);
sys/dev/drm/amd/amdgpu/amdgpu_cs.c:884: r = amdgpu_ring_patch_cs_in_place(ring, p, j);
sys/dev/drm/amd/amdgpu/amdgpu_cs.c:1033: r = amdgpu_ib_get(adev, vm, ring->funcs->parse_cs ?
=== vcn_v1_0.c dec ring funcs (2043-2069): NO parse_cs hook ===
static const struct amdgpu_ring_funcs vcn_v1_0_dec_ring_vm_funcs = {
.type = AMDGPU_RING_TYPE_VCN_DEC,
.align_mask = 0xf,
.support_64bit_ptrs = false,
.vmhub = AMDGPU_MMHUB,
.get_rptr = vcn_v1_0_dec_ring_get_rptr,
.get_wptr = vcn_v1_0_dec_ring_get_wptr,
.set_wptr = vcn_v1_0_dec_ring_set_wptr,
.emit_frame_size =
6 + 6 + /* hdp invalidate / flush */
SOC15_FLUSH_GPU_TLB_NUM_WREG * 6 +
SOC15_FLUSH_GPU_TLB_NUM_REG_WAIT * 8 +
8 + /* vcn_v1_0_dec_ring_emit_vm_flush */
14 + 14 + /* vcn_v1_0_dec_ring_emit_fence x2 vm fence */
6,
.emit_ib_size = 8, /* vcn_v1_0_dec_ring_emit_ib */
.emit_ib = vcn_v1_0_dec_ring_emit_ib,
.emit_fence = vcn_v1_0_dec_ring_emit_fence,
.emit_vm_flush = vcn_v1_0_dec_ring_emit_vm_flush,
.test_ring = amdgpu_vcn_dec_ring_test_ring,
.test_ib = amdgpu_vcn_dec_ring_test_ib,
.insert_nop = vcn_v1_0_dec_ring_insert_nop,
.insert_start = vcn_v1_0_dec_ring_insert_start,
.insert_end = vcn_v1_0_dec_ring_insert_end,
.pad_ib = amdgpu_ring_generic_pad_ib,
.begin_use = amdgpu_vcn_ring_begin_use,
=== amdgpu_cs.c:833-836 - ib contents parsed ONLY for rings with parse_cs/patch_cs_in_place ===
/* Only for UVD/VCE VM emulation */
if (ring->funcs->parse_cs || ring->funcs->patch_cs_in_place) {
unsigned i, j;
for (i = 0, j = 0; i < p->nchunks && j < p->job->num_ibs; i++) {
struct drm_amdgpu_cs_chunk_ib *chunk_ib;
=== guest runtime: no AMD GPU, no /dev/dri ===