diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h | 29 | 
1 files changed, 22 insertions, 7 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h index 2345b39878c6..63e56398ca9a 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h @@ -27,10 +27,11 @@  #include "gpu_scheduler.h"  /* max number of rings */ -#define AMDGPU_MAX_RINGS		16 +#define AMDGPU_MAX_RINGS		18  #define AMDGPU_MAX_GFX_RINGS		1  #define AMDGPU_MAX_COMPUTE_RINGS	8  #define AMDGPU_MAX_VCE_RINGS		3 +#define AMDGPU_MAX_UVD_ENC_RINGS	2  /* some special values for the owner field */  #define AMDGPU_FENCE_OWNER_UNDEFINED	((void*)0ul) @@ -45,7 +46,8 @@ enum amdgpu_ring_type {  	AMDGPU_RING_TYPE_SDMA,  	AMDGPU_RING_TYPE_UVD,  	AMDGPU_RING_TYPE_VCE, -	AMDGPU_RING_TYPE_KIQ +	AMDGPU_RING_TYPE_KIQ, +	AMDGPU_RING_TYPE_UVD_ENC  };  struct amdgpu_device; @@ -96,10 +98,11 @@ struct amdgpu_ring_funcs {  	enum amdgpu_ring_type	type;  	uint32_t		align_mask;  	u32			nop; +	bool			support_64bit_ptrs;  	/* ring read/write ptr handling */ -	u32 (*get_rptr)(struct amdgpu_ring *ring); -	u32 (*get_wptr)(struct amdgpu_ring *ring); +	u64 (*get_rptr)(struct amdgpu_ring *ring); +	u64 (*get_wptr)(struct amdgpu_ring *ring);  	void (*set_wptr)(struct amdgpu_ring *ring);  	/* validating and patching of IBs */  	int (*parse_cs)(struct amdgpu_cs_parser *p, uint32_t ib_idx); @@ -126,6 +129,7 @@ struct amdgpu_ring_funcs {  	int (*test_ib)(struct amdgpu_ring *ring, long timeout);  	/* insert NOP packets */  	void (*insert_nop)(struct amdgpu_ring *ring, uint32_t count); +	void (*insert_end)(struct amdgpu_ring *ring);  	/* pad the indirect buffer to the necessary number of dw */  	void (*pad_ib)(struct amdgpu_ring *ring, struct amdgpu_ib *ib);  	unsigned (*init_cond_exec)(struct amdgpu_ring *ring); @@ -148,19 +152,23 @@ struct amdgpu_ring {  	struct amdgpu_bo	*ring_obj;  	volatile uint32_t	*ring;  	unsigned		rptr_offs; -	unsigned		wptr; -	unsigned		wptr_old; +	u64			wptr; +	u64			wptr_old;  	unsigned		ring_size;  	unsigned		max_dw;  	int			count_dw;  	uint64_t		gpu_addr; -	uint32_t		ptr_mask; +	uint64_t		ptr_mask; +	uint32_t		buf_mask;  	bool			ready;  	u32			idx;  	u32			me;  	u32			pipe;  	u32			queue;  	struct amdgpu_bo	*mqd_obj; +	uint64_t                mqd_gpu_addr; +	void                    *mqd_ptr; +	uint64_t                eop_gpu_addr;  	u32			doorbell_index;  	bool			use_doorbell;  	unsigned		wptr_offs; @@ -184,5 +192,12 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring,  		     unsigned ring_size, struct amdgpu_irq_src *irq_src,  		     unsigned irq_type);  void amdgpu_ring_fini(struct amdgpu_ring *ring); +static inline void amdgpu_ring_clear_ring(struct amdgpu_ring *ring) +{ +	int i = 0; +	while (i <= ring->buf_mask) +		ring->ring[i++] = ring->funcs->nop; + +}  #endif |