Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amdgpu/vcn3: replace ip based software ring decode with common vcn software ring decode

Replace ip based software ring decode with common vcn software ring decode.

Signed-off-by: James Zhu <James.Zhu@amd.com>
Reviewed-by: Christian Koenig <Christian.Koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

James Zhu and committed by
Alex Deucher
3d4cfd9e 60a2e9ee

+9 -83
+9 -71
drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c
··· 30 30 #include "soc15d.h" 31 31 #include "vcn_v2_0.h" 32 32 #include "mmsch_v3_0.h" 33 + #include "vcn_sw_ring.h" 33 34 34 35 #include "vcn/vcn_3_0_0_offset.h" 35 36 #include "vcn/vcn_3_0_0_sh_mask.h" ··· 1732 1731 } 1733 1732 } 1734 1733 1735 - void vcn_v3_0_dec_sw_ring_emit_fence(struct amdgpu_ring *ring, u64 addr, 1736 - u64 seq, uint32_t flags) 1737 - { 1738 - WARN_ON(flags & AMDGPU_FENCE_FLAG_64BIT); 1739 - 1740 - amdgpu_ring_write(ring, VCN_DEC_SW_CMD_FENCE); 1741 - amdgpu_ring_write(ring, addr); 1742 - amdgpu_ring_write(ring, upper_32_bits(addr)); 1743 - amdgpu_ring_write(ring, seq); 1744 - amdgpu_ring_write(ring, VCN_DEC_SW_CMD_TRAP); 1745 - } 1746 - 1747 - void vcn_v3_0_dec_sw_ring_insert_end(struct amdgpu_ring *ring) 1748 - { 1749 - amdgpu_ring_write(ring, VCN_DEC_SW_CMD_END); 1750 - } 1751 - 1752 - void vcn_v3_0_dec_sw_ring_emit_ib(struct amdgpu_ring *ring, struct amdgpu_job *job, 1753 - struct amdgpu_ib *ib, uint32_t flags) 1754 - { 1755 - uint32_t vmid = AMDGPU_JOB_GET_VMID(job); 1756 - 1757 - amdgpu_ring_write(ring, VCN_DEC_SW_CMD_IB); 1758 - amdgpu_ring_write(ring, vmid); 1759 - amdgpu_ring_write(ring, lower_32_bits(ib->gpu_addr)); 1760 - amdgpu_ring_write(ring, upper_32_bits(ib->gpu_addr)); 1761 - amdgpu_ring_write(ring, ib->length_dw); 1762 - } 1763 - 1764 - void vcn_v3_0_dec_sw_ring_emit_reg_wait(struct amdgpu_ring *ring, uint32_t reg, 1765 - uint32_t val, uint32_t mask) 1766 - { 1767 - amdgpu_ring_write(ring, VCN_DEC_SW_CMD_REG_WAIT); 1768 - amdgpu_ring_write(ring, reg << 2); 1769 - amdgpu_ring_write(ring, mask); 1770 - amdgpu_ring_write(ring, val); 1771 - } 1772 - 1773 - void vcn_v3_0_dec_sw_ring_emit_vm_flush(struct amdgpu_ring *ring, 1774 - uint32_t vmid, uint64_t pd_addr) 1775 - { 1776 - struct amdgpu_vmhub *hub = &ring->adev->vmhub[ring->funcs->vmhub]; 1777 - uint32_t data0, data1, mask; 1778 - 1779 - pd_addr = amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pd_addr); 1780 - 1781 - /* wait for register write */ 1782 - data0 = hub->ctx0_ptb_addr_lo32 + vmid * hub->ctx_addr_distance; 1783 - data1 = lower_32_bits(pd_addr); 1784 - mask = 0xffffffff; 1785 - vcn_v3_0_dec_sw_ring_emit_reg_wait(ring, data0, data1, mask); 1786 - } 1787 - 1788 - void vcn_v3_0_dec_sw_ring_emit_wreg(struct amdgpu_ring *ring, uint32_t reg, 1789 - uint32_t val) 1790 - { 1791 - amdgpu_ring_write(ring, VCN_DEC_SW_CMD_REG_WRITE); 1792 - amdgpu_ring_write(ring, reg << 2); 1793 - amdgpu_ring_write(ring, val); 1794 - } 1795 - 1796 1734 static const struct amdgpu_ring_funcs vcn_v3_0_dec_sw_ring_vm_funcs = { 1797 1735 .type = AMDGPU_RING_TYPE_VCN_DEC, 1798 1736 .align_mask = 0x3f, ··· 1744 1804 .emit_frame_size = 1745 1805 SOC15_FLUSH_GPU_TLB_NUM_WREG * 3 + 1746 1806 SOC15_FLUSH_GPU_TLB_NUM_REG_WAIT * 4 + 1747 - 4 + /* vcn_v3_0_dec_sw_ring_emit_vm_flush */ 1748 - 5 + 5 + /* vcn_v3_0_dec_sw_ring_emit_fdec_swe x2 vm fdec_swe */ 1749 - 1, /* vcn_v3_0_dec_sw_ring_insert_end */ 1750 - .emit_ib_size = 5, /* vcn_v3_0_dec_sw_ring_emit_ib */ 1751 - .emit_ib = vcn_v3_0_dec_sw_ring_emit_ib, 1752 - .emit_fence = vcn_v3_0_dec_sw_ring_emit_fence, 1753 - .emit_vm_flush = vcn_v3_0_dec_sw_ring_emit_vm_flush, 1807 + VCN_SW_RING_EMIT_FRAME_SIZE, 1808 + .emit_ib_size = 5, /* vcn_dec_sw_ring_emit_ib */ 1809 + .emit_ib = vcn_dec_sw_ring_emit_ib, 1810 + .emit_fence = vcn_dec_sw_ring_emit_fence, 1811 + .emit_vm_flush = vcn_dec_sw_ring_emit_vm_flush, 1754 1812 .test_ring = amdgpu_vcn_dec_sw_ring_test_ring, 1755 1813 .test_ib = NULL,//amdgpu_vcn_dec_sw_ring_test_ib, 1756 1814 .insert_nop = amdgpu_ring_insert_nop, 1757 - .insert_end = vcn_v3_0_dec_sw_ring_insert_end, 1815 + .insert_end = vcn_dec_sw_ring_insert_end, 1758 1816 .pad_ib = amdgpu_ring_generic_pad_ib, 1759 1817 .begin_use = amdgpu_vcn_ring_begin_use, 1760 1818 .end_use = amdgpu_vcn_ring_end_use, 1761 - .emit_wreg = vcn_v3_0_dec_sw_ring_emit_wreg, 1762 - .emit_reg_wait = vcn_v3_0_dec_sw_ring_emit_reg_wait, 1819 + .emit_wreg = vcn_dec_sw_ring_emit_wreg, 1820 + .emit_reg_wait = vcn_dec_sw_ring_emit_reg_wait, 1763 1821 .emit_reg_write_reg_wait = amdgpu_ring_emit_reg_write_reg_wait_helper, 1764 1822 }; 1765 1823
-12
drivers/gpu/drm/amd/amdgpu/vcn_v3_0.h
··· 26 26 27 27 extern const struct amdgpu_ip_block_version vcn_v3_0_ip_block; 28 28 29 - void vcn_v3_0_dec_sw_ring_emit_fence(struct amdgpu_ring *ring, u64 addr, 30 - u64 seq, uint32_t flags); 31 - void vcn_v3_0_dec_sw_ring_insert_end(struct amdgpu_ring *ring); 32 - void vcn_v3_0_dec_sw_ring_emit_ib(struct amdgpu_ring *ring, struct amdgpu_job *job, 33 - struct amdgpu_ib *ib, uint32_t flags); 34 - void vcn_v3_0_dec_sw_ring_emit_reg_wait(struct amdgpu_ring *ring, uint32_t reg, 35 - uint32_t val, uint32_t mask); 36 - void vcn_v3_0_dec_sw_ring_emit_vm_flush(struct amdgpu_ring *ring, 37 - uint32_t vmid, uint64_t pd_addr); 38 - void vcn_v3_0_dec_sw_ring_emit_wreg(struct amdgpu_ring *ring, uint32_t reg, 39 - uint32_t val); 40 - 41 29 #endif /* __VCN_V3_0_H__ */