drm/radeon/kms: Add initial support for async DMA on r6xx/r7xx
Uses the new multi-ring infrastucture. 6xx/7xx has a single async DMA ring. Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
@@ -109,7 +109,7 @@ extern int radeon_lockup_timeout;
|
||||
#define RADEON_BIOS_NUM_SCRATCH 8
|
||||
|
||||
/* max number of rings */
|
||||
#define RADEON_NUM_RINGS 3
|
||||
#define RADEON_NUM_RINGS 4
|
||||
|
||||
/* fence seq are set to this number when signaled */
|
||||
#define RADEON_FENCE_SIGNALED_SEQ 0LL
|
||||
@@ -122,6 +122,9 @@ extern int radeon_lockup_timeout;
|
||||
#define CAYMAN_RING_TYPE_CP1_INDEX 1
|
||||
#define CAYMAN_RING_TYPE_CP2_INDEX 2
|
||||
|
||||
/* R600+ has an async dma ring */
|
||||
#define R600_RING_TYPE_DMA_INDEX 3
|
||||
|
||||
/* hardcode those limit for now */
|
||||
#define RADEON_VA_IB_OFFSET (1 << 20)
|
||||
#define RADEON_VA_RESERVED_SIZE (8 << 20)
|
||||
@@ -787,6 +790,11 @@ int radeon_ring_init(struct radeon_device *rdev, struct radeon_ring *cp, unsigne
|
||||
void radeon_ring_fini(struct radeon_device *rdev, struct radeon_ring *cp);
|
||||
|
||||
|
||||
/* r600 async dma */
|
||||
void r600_dma_stop(struct radeon_device *rdev);
|
||||
int r600_dma_resume(struct radeon_device *rdev);
|
||||
void r600_dma_fini(struct radeon_device *rdev);
|
||||
|
||||
/*
|
||||
* CS.
|
||||
*/
|
||||
@@ -883,6 +891,7 @@ struct radeon_wb {
|
||||
#define RADEON_WB_CP_RPTR_OFFSET 1024
|
||||
#define RADEON_WB_CP1_RPTR_OFFSET 1280
|
||||
#define RADEON_WB_CP2_RPTR_OFFSET 1536
|
||||
#define R600_WB_DMA_RPTR_OFFSET 1792
|
||||
#define R600_WB_IH_WPTR_OFFSET 2048
|
||||
#define R600_WB_EVENT_OFFSET 3072
|
||||
|
||||
|
Reference in New Issue
Block a user