drm/radeon: drop drivers copy of the rptr
In all cases where it really matters we are using the read functions anyway. Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
a1d6f97c8c
commit
ff212f25fe
15 changed files with 32 additions and 53 deletions
|
@ -4031,8 +4031,6 @@ static int cik_cp_gfx_resume(struct radeon_device *rdev)
|
||||||
WREG32(CP_RB0_BASE, rb_addr);
|
WREG32(CP_RB0_BASE, rb_addr);
|
||||||
WREG32(CP_RB0_BASE_HI, upper_32_bits(rb_addr));
|
WREG32(CP_RB0_BASE_HI, upper_32_bits(rb_addr));
|
||||||
|
|
||||||
ring->rptr = RREG32(CP_RB0_RPTR);
|
|
||||||
|
|
||||||
/* start the ring */
|
/* start the ring */
|
||||||
cik_cp_gfx_start(rdev);
|
cik_cp_gfx_start(rdev);
|
||||||
rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = true;
|
rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = true;
|
||||||
|
@ -4587,8 +4585,7 @@ static int cik_cp_compute_resume(struct radeon_device *rdev)
|
||||||
rdev->ring[idx].wptr = 0;
|
rdev->ring[idx].wptr = 0;
|
||||||
mqd->queue_state.cp_hqd_pq_wptr = rdev->ring[idx].wptr;
|
mqd->queue_state.cp_hqd_pq_wptr = rdev->ring[idx].wptr;
|
||||||
WREG32(CP_HQD_PQ_WPTR, mqd->queue_state.cp_hqd_pq_wptr);
|
WREG32(CP_HQD_PQ_WPTR, mqd->queue_state.cp_hqd_pq_wptr);
|
||||||
rdev->ring[idx].rptr = RREG32(CP_HQD_PQ_RPTR);
|
mqd->queue_state.cp_hqd_pq_rptr = RREG32(CP_HQD_PQ_RPTR);
|
||||||
mqd->queue_state.cp_hqd_pq_rptr = rdev->ring[idx].rptr;
|
|
||||||
|
|
||||||
/* set the vmid for the queue */
|
/* set the vmid for the queue */
|
||||||
mqd->queue_state.cp_hqd_vmid = 0;
|
mqd->queue_state.cp_hqd_vmid = 0;
|
||||||
|
@ -5118,7 +5115,7 @@ bool cik_gfx_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring)
|
||||||
if (!(reset_mask & (RADEON_RESET_GFX |
|
if (!(reset_mask & (RADEON_RESET_GFX |
|
||||||
RADEON_RESET_COMPUTE |
|
RADEON_RESET_COMPUTE |
|
||||||
RADEON_RESET_CP))) {
|
RADEON_RESET_CP))) {
|
||||||
radeon_ring_lockup_update(ring);
|
radeon_ring_lockup_update(rdev, ring);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
/* force CP activities */
|
/* force CP activities */
|
||||||
|
|
|
@ -362,8 +362,6 @@ static int cik_sdma_gfx_resume(struct radeon_device *rdev)
|
||||||
ring->wptr = 0;
|
ring->wptr = 0;
|
||||||
WREG32(SDMA0_GFX_RB_WPTR + reg_offset, ring->wptr << 2);
|
WREG32(SDMA0_GFX_RB_WPTR + reg_offset, ring->wptr << 2);
|
||||||
|
|
||||||
ring->rptr = RREG32(SDMA0_GFX_RB_RPTR + reg_offset) >> 2;
|
|
||||||
|
|
||||||
/* enable DMA RB */
|
/* enable DMA RB */
|
||||||
WREG32(SDMA0_GFX_RB_CNTL + reg_offset, rb_cntl | SDMA_RB_ENABLE);
|
WREG32(SDMA0_GFX_RB_CNTL + reg_offset, rb_cntl | SDMA_RB_ENABLE);
|
||||||
|
|
||||||
|
@ -713,7 +711,7 @@ bool cik_sdma_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring)
|
||||||
mask = RADEON_RESET_DMA1;
|
mask = RADEON_RESET_DMA1;
|
||||||
|
|
||||||
if (!(reset_mask & mask)) {
|
if (!(reset_mask & mask)) {
|
||||||
radeon_ring_lockup_update(ring);
|
radeon_ring_lockup_update(rdev, ring);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
/* force ring activities */
|
/* force ring activities */
|
||||||
|
|
|
@ -2990,8 +2990,6 @@ static int evergreen_cp_resume(struct radeon_device *rdev)
|
||||||
WREG32(CP_RB_BASE, ring->gpu_addr >> 8);
|
WREG32(CP_RB_BASE, ring->gpu_addr >> 8);
|
||||||
WREG32(CP_DEBUG, (1 << 27) | (1 << 28));
|
WREG32(CP_DEBUG, (1 << 27) | (1 << 28));
|
||||||
|
|
||||||
ring->rptr = RREG32(CP_RB_RPTR);
|
|
||||||
|
|
||||||
evergreen_cp_start(rdev);
|
evergreen_cp_start(rdev);
|
||||||
ring->ready = true;
|
ring->ready = true;
|
||||||
r = radeon_ring_test(rdev, RADEON_RING_TYPE_GFX_INDEX, ring);
|
r = radeon_ring_test(rdev, RADEON_RING_TYPE_GFX_INDEX, ring);
|
||||||
|
@ -3952,7 +3950,7 @@ bool evergreen_gfx_is_lockup(struct radeon_device *rdev, struct radeon_ring *rin
|
||||||
if (!(reset_mask & (RADEON_RESET_GFX |
|
if (!(reset_mask & (RADEON_RESET_GFX |
|
||||||
RADEON_RESET_COMPUTE |
|
RADEON_RESET_COMPUTE |
|
||||||
RADEON_RESET_CP))) {
|
RADEON_RESET_CP))) {
|
||||||
radeon_ring_lockup_update(ring);
|
radeon_ring_lockup_update(rdev, ring);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
/* force CP activities */
|
/* force CP activities */
|
||||||
|
|
|
@ -174,7 +174,7 @@ bool evergreen_dma_is_lockup(struct radeon_device *rdev, struct radeon_ring *rin
|
||||||
u32 reset_mask = evergreen_gpu_check_soft_reset(rdev);
|
u32 reset_mask = evergreen_gpu_check_soft_reset(rdev);
|
||||||
|
|
||||||
if (!(reset_mask & RADEON_RESET_DMA)) {
|
if (!(reset_mask & RADEON_RESET_DMA)) {
|
||||||
radeon_ring_lockup_update(ring);
|
radeon_ring_lockup_update(rdev, ring);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
/* force ring activities */
|
/* force ring activities */
|
||||||
|
|
|
@ -1642,8 +1642,8 @@ static int cayman_cp_resume(struct radeon_device *rdev)
|
||||||
ring = &rdev->ring[ridx[i]];
|
ring = &rdev->ring[ridx[i]];
|
||||||
WREG32_P(cp_rb_cntl[i], RB_RPTR_WR_ENA, ~RB_RPTR_WR_ENA);
|
WREG32_P(cp_rb_cntl[i], RB_RPTR_WR_ENA, ~RB_RPTR_WR_ENA);
|
||||||
|
|
||||||
ring->rptr = ring->wptr = 0;
|
ring->wptr = 0;
|
||||||
WREG32(cp_rb_rptr[i], ring->rptr);
|
WREG32(cp_rb_rptr[i], 0);
|
||||||
WREG32(cp_rb_wptr[i], ring->wptr);
|
WREG32(cp_rb_wptr[i], ring->wptr);
|
||||||
|
|
||||||
mdelay(1);
|
mdelay(1);
|
||||||
|
@ -1917,7 +1917,7 @@ bool cayman_gfx_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring)
|
||||||
if (!(reset_mask & (RADEON_RESET_GFX |
|
if (!(reset_mask & (RADEON_RESET_GFX |
|
||||||
RADEON_RESET_COMPUTE |
|
RADEON_RESET_COMPUTE |
|
||||||
RADEON_RESET_CP))) {
|
RADEON_RESET_CP))) {
|
||||||
radeon_ring_lockup_update(ring);
|
radeon_ring_lockup_update(rdev, ring);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
/* force CP activities */
|
/* force CP activities */
|
||||||
|
|
|
@ -248,8 +248,6 @@ int cayman_dma_resume(struct radeon_device *rdev)
|
||||||
ring->wptr = 0;
|
ring->wptr = 0;
|
||||||
WREG32(DMA_RB_WPTR + reg_offset, ring->wptr << 2);
|
WREG32(DMA_RB_WPTR + reg_offset, ring->wptr << 2);
|
||||||
|
|
||||||
ring->rptr = RREG32(DMA_RB_RPTR + reg_offset) >> 2;
|
|
||||||
|
|
||||||
WREG32(DMA_RB_CNTL + reg_offset, rb_cntl | DMA_RB_ENABLE);
|
WREG32(DMA_RB_CNTL + reg_offset, rb_cntl | DMA_RB_ENABLE);
|
||||||
|
|
||||||
ring->ready = true;
|
ring->ready = true;
|
||||||
|
@ -302,7 +300,7 @@ bool cayman_dma_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring)
|
||||||
mask = RADEON_RESET_DMA1;
|
mask = RADEON_RESET_DMA1;
|
||||||
|
|
||||||
if (!(reset_mask & mask)) {
|
if (!(reset_mask & mask)) {
|
||||||
radeon_ring_lockup_update(ring);
|
radeon_ring_lockup_update(rdev, ring);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
/* force ring activities */
|
/* force ring activities */
|
||||||
|
|
|
@ -1193,7 +1193,6 @@ int r100_cp_init(struct radeon_device *rdev, unsigned ring_size)
|
||||||
|
|
||||||
WREG32(RADEON_CP_RB_CNTL, tmp);
|
WREG32(RADEON_CP_RB_CNTL, tmp);
|
||||||
udelay(10);
|
udelay(10);
|
||||||
ring->rptr = RREG32(RADEON_CP_RB_RPTR);
|
|
||||||
/* Set cp mode to bus mastering & enable cp*/
|
/* Set cp mode to bus mastering & enable cp*/
|
||||||
WREG32(RADEON_CP_CSQ_MODE,
|
WREG32(RADEON_CP_CSQ_MODE,
|
||||||
REG_SET(RADEON_INDIRECT2_START, indirect2_start) |
|
REG_SET(RADEON_INDIRECT2_START, indirect2_start) |
|
||||||
|
@ -2523,7 +2522,7 @@ bool r100_gpu_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring)
|
||||||
|
|
||||||
rbbm_status = RREG32(R_000E40_RBBM_STATUS);
|
rbbm_status = RREG32(R_000E40_RBBM_STATUS);
|
||||||
if (!G_000E40_GUI_ACTIVE(rbbm_status)) {
|
if (!G_000E40_GUI_ACTIVE(rbbm_status)) {
|
||||||
radeon_ring_lockup_update(ring);
|
radeon_ring_lockup_update(rdev, ring);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
/* force CP activities */
|
/* force CP activities */
|
||||||
|
|
|
@ -1748,7 +1748,7 @@ bool r600_gfx_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring)
|
||||||
if (!(reset_mask & (RADEON_RESET_GFX |
|
if (!(reset_mask & (RADEON_RESET_GFX |
|
||||||
RADEON_RESET_COMPUTE |
|
RADEON_RESET_COMPUTE |
|
||||||
RADEON_RESET_CP))) {
|
RADEON_RESET_CP))) {
|
||||||
radeon_ring_lockup_update(ring);
|
radeon_ring_lockup_update(rdev, ring);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
/* force CP activities */
|
/* force CP activities */
|
||||||
|
@ -2604,8 +2604,6 @@ int r600_cp_resume(struct radeon_device *rdev)
|
||||||
WREG32(CP_RB_BASE, ring->gpu_addr >> 8);
|
WREG32(CP_RB_BASE, ring->gpu_addr >> 8);
|
||||||
WREG32(CP_DEBUG, (1 << 27) | (1 << 28));
|
WREG32(CP_DEBUG, (1 << 27) | (1 << 28));
|
||||||
|
|
||||||
ring->rptr = RREG32(CP_RB_RPTR);
|
|
||||||
|
|
||||||
r600_cp_start(rdev);
|
r600_cp_start(rdev);
|
||||||
ring->ready = true;
|
ring->ready = true;
|
||||||
r = radeon_ring_test(rdev, RADEON_RING_TYPE_GFX_INDEX, ring);
|
r = radeon_ring_test(rdev, RADEON_RING_TYPE_GFX_INDEX, ring);
|
||||||
|
|
|
@ -176,8 +176,6 @@ int r600_dma_resume(struct radeon_device *rdev)
|
||||||
ring->wptr = 0;
|
ring->wptr = 0;
|
||||||
WREG32(DMA_RB_WPTR, ring->wptr << 2);
|
WREG32(DMA_RB_WPTR, ring->wptr << 2);
|
||||||
|
|
||||||
ring->rptr = RREG32(DMA_RB_RPTR) >> 2;
|
|
||||||
|
|
||||||
WREG32(DMA_RB_CNTL, rb_cntl | DMA_RB_ENABLE);
|
WREG32(DMA_RB_CNTL, rb_cntl | DMA_RB_ENABLE);
|
||||||
|
|
||||||
ring->ready = true;
|
ring->ready = true;
|
||||||
|
@ -221,7 +219,7 @@ bool r600_dma_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring)
|
||||||
u32 reset_mask = r600_gpu_check_soft_reset(rdev);
|
u32 reset_mask = r600_gpu_check_soft_reset(rdev);
|
||||||
|
|
||||||
if (!(reset_mask & RADEON_RESET_DMA)) {
|
if (!(reset_mask & RADEON_RESET_DMA)) {
|
||||||
radeon_ring_lockup_update(ring);
|
radeon_ring_lockup_update(rdev, ring);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
/* force ring activities */
|
/* force ring activities */
|
||||||
|
|
|
@ -793,7 +793,6 @@ struct radeon_ib {
|
||||||
struct radeon_ring {
|
struct radeon_ring {
|
||||||
struct radeon_bo *ring_obj;
|
struct radeon_bo *ring_obj;
|
||||||
volatile uint32_t *ring;
|
volatile uint32_t *ring;
|
||||||
unsigned rptr;
|
|
||||||
unsigned rptr_offs;
|
unsigned rptr_offs;
|
||||||
unsigned rptr_save_reg;
|
unsigned rptr_save_reg;
|
||||||
u64 next_rptr_gpu_addr;
|
u64 next_rptr_gpu_addr;
|
||||||
|
@ -958,7 +957,8 @@ void radeon_ring_undo(struct radeon_ring *ring);
|
||||||
void radeon_ring_unlock_undo(struct radeon_device *rdev, struct radeon_ring *cp);
|
void radeon_ring_unlock_undo(struct radeon_device *rdev, struct radeon_ring *cp);
|
||||||
int radeon_ring_test(struct radeon_device *rdev, struct radeon_ring *cp);
|
int radeon_ring_test(struct radeon_device *rdev, struct radeon_ring *cp);
|
||||||
void radeon_ring_force_activity(struct radeon_device *rdev, struct radeon_ring *ring);
|
void radeon_ring_force_activity(struct radeon_device *rdev, struct radeon_ring *ring);
|
||||||
void radeon_ring_lockup_update(struct radeon_ring *ring);
|
void radeon_ring_lockup_update(struct radeon_device *rdev,
|
||||||
|
struct radeon_ring *ring);
|
||||||
bool radeon_ring_test_lockup(struct radeon_device *rdev, struct radeon_ring *ring);
|
bool radeon_ring_test_lockup(struct radeon_device *rdev, struct radeon_ring *ring);
|
||||||
unsigned radeon_ring_backup(struct radeon_device *rdev, struct radeon_ring *ring,
|
unsigned radeon_ring_backup(struct radeon_device *rdev, struct radeon_ring *ring,
|
||||||
uint32_t **data);
|
uint32_t **data);
|
||||||
|
|
|
@ -342,9 +342,10 @@ bool radeon_ring_supports_scratch_reg(struct radeon_device *rdev,
|
||||||
*/
|
*/
|
||||||
void radeon_ring_free_size(struct radeon_device *rdev, struct radeon_ring *ring)
|
void radeon_ring_free_size(struct radeon_device *rdev, struct radeon_ring *ring)
|
||||||
{
|
{
|
||||||
ring->rptr = radeon_ring_get_rptr(rdev, ring);
|
uint32_t rptr = radeon_ring_get_rptr(rdev, ring);
|
||||||
|
|
||||||
/* This works because ring_size is a power of 2 */
|
/* This works because ring_size is a power of 2 */
|
||||||
ring->ring_free_dw = (ring->rptr + (ring->ring_size / 4));
|
ring->ring_free_dw = rptr + (ring->ring_size / 4);
|
||||||
ring->ring_free_dw -= ring->wptr;
|
ring->ring_free_dw -= ring->wptr;
|
||||||
ring->ring_free_dw &= ring->ptr_mask;
|
ring->ring_free_dw &= ring->ptr_mask;
|
||||||
if (!ring->ring_free_dw) {
|
if (!ring->ring_free_dw) {
|
||||||
|
@ -376,7 +377,7 @@ int radeon_ring_alloc(struct radeon_device *rdev, struct radeon_ring *ring, unsi
|
||||||
/* This is an empty ring update lockup info to avoid
|
/* This is an empty ring update lockup info to avoid
|
||||||
* false positive.
|
* false positive.
|
||||||
*/
|
*/
|
||||||
radeon_ring_lockup_update(ring);
|
radeon_ring_lockup_update(rdev, ring);
|
||||||
}
|
}
|
||||||
ndw = (ndw + ring->align_mask) & ~ring->align_mask;
|
ndw = (ndw + ring->align_mask) & ~ring->align_mask;
|
||||||
while (ndw > (ring->ring_free_dw - 1)) {
|
while (ndw > (ring->ring_free_dw - 1)) {
|
||||||
|
@ -490,8 +491,7 @@ void radeon_ring_force_activity(struct radeon_device *rdev, struct radeon_ring *
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
radeon_ring_free_size(rdev, ring);
|
if (radeon_ring_get_rptr(rdev, ring) == ring->wptr) {
|
||||||
if (ring->rptr == ring->wptr) {
|
|
||||||
r = radeon_ring_alloc(rdev, ring, 1);
|
r = radeon_ring_alloc(rdev, ring, 1);
|
||||||
if (!r) {
|
if (!r) {
|
||||||
radeon_ring_write(ring, ring->nop);
|
radeon_ring_write(ring, ring->nop);
|
||||||
|
@ -507,9 +507,10 @@ void radeon_ring_force_activity(struct radeon_device *rdev, struct radeon_ring *
|
||||||
*
|
*
|
||||||
* Update the last rptr value and timestamp (all asics).
|
* Update the last rptr value and timestamp (all asics).
|
||||||
*/
|
*/
|
||||||
void radeon_ring_lockup_update(struct radeon_ring *ring)
|
void radeon_ring_lockup_update(struct radeon_device *rdev,
|
||||||
|
struct radeon_ring *ring)
|
||||||
{
|
{
|
||||||
ring->last_rptr = ring->rptr;
|
ring->last_rptr = radeon_ring_get_rptr(rdev, ring);
|
||||||
ring->last_activity = jiffies;
|
ring->last_activity = jiffies;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -535,18 +536,18 @@ void radeon_ring_lockup_update(struct radeon_ring *ring)
|
||||||
**/
|
**/
|
||||||
bool radeon_ring_test_lockup(struct radeon_device *rdev, struct radeon_ring *ring)
|
bool radeon_ring_test_lockup(struct radeon_device *rdev, struct radeon_ring *ring)
|
||||||
{
|
{
|
||||||
|
uint32_t rptr = radeon_ring_get_rptr(rdev, ring);
|
||||||
unsigned long cjiffies, elapsed;
|
unsigned long cjiffies, elapsed;
|
||||||
|
|
||||||
cjiffies = jiffies;
|
cjiffies = jiffies;
|
||||||
if (!time_after(cjiffies, ring->last_activity)) {
|
if (!time_after(cjiffies, ring->last_activity)) {
|
||||||
/* likely a wrap around */
|
/* likely a wrap around */
|
||||||
radeon_ring_lockup_update(ring);
|
radeon_ring_lockup_update(rdev, ring);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
ring->rptr = radeon_ring_get_rptr(rdev, ring);
|
if (rptr != ring->last_rptr) {
|
||||||
if (ring->rptr != ring->last_rptr) {
|
|
||||||
/* CP is still working no lockup */
|
/* CP is still working no lockup */
|
||||||
radeon_ring_lockup_update(ring);
|
radeon_ring_lockup_update(rdev, ring);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
elapsed = jiffies_to_msecs(cjiffies - ring->last_activity);
|
elapsed = jiffies_to_msecs(cjiffies - ring->last_activity);
|
||||||
|
@ -709,7 +710,7 @@ int radeon_ring_init(struct radeon_device *rdev, struct radeon_ring *ring, unsig
|
||||||
if (radeon_debugfs_ring_init(rdev, ring)) {
|
if (radeon_debugfs_ring_init(rdev, ring)) {
|
||||||
DRM_ERROR("Failed to register debugfs file for rings !\n");
|
DRM_ERROR("Failed to register debugfs file for rings !\n");
|
||||||
}
|
}
|
||||||
radeon_ring_lockup_update(ring);
|
radeon_ring_lockup_update(rdev, ring);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -780,8 +781,6 @@ static int radeon_debugfs_ring_info(struct seq_file *m, void *data)
|
||||||
|
|
||||||
seq_printf(m, "driver's copy of the wptr: 0x%08x [%5d]\n",
|
seq_printf(m, "driver's copy of the wptr: 0x%08x [%5d]\n",
|
||||||
ring->wptr, ring->wptr);
|
ring->wptr, ring->wptr);
|
||||||
seq_printf(m, "driver's copy of the rptr: 0x%08x [%5d]\n",
|
|
||||||
ring->rptr, ring->rptr);
|
|
||||||
seq_printf(m, "last semaphore signal addr : 0x%016llx\n",
|
seq_printf(m, "last semaphore signal addr : 0x%016llx\n",
|
||||||
ring->last_semaphore_signal_addr);
|
ring->last_semaphore_signal_addr);
|
||||||
seq_printf(m, "last semaphore wait addr : 0x%016llx\n",
|
seq_printf(m, "last semaphore wait addr : 0x%016llx\n",
|
||||||
|
|
|
@ -3434,8 +3434,6 @@ static int si_cp_resume(struct radeon_device *rdev)
|
||||||
|
|
||||||
WREG32(CP_RB0_BASE, ring->gpu_addr >> 8);
|
WREG32(CP_RB0_BASE, ring->gpu_addr >> 8);
|
||||||
|
|
||||||
ring->rptr = RREG32(CP_RB0_RPTR);
|
|
||||||
|
|
||||||
/* ring1 - compute only */
|
/* ring1 - compute only */
|
||||||
/* Set ring buffer size */
|
/* Set ring buffer size */
|
||||||
ring = &rdev->ring[CAYMAN_RING_TYPE_CP1_INDEX];
|
ring = &rdev->ring[CAYMAN_RING_TYPE_CP1_INDEX];
|
||||||
|
@ -3460,8 +3458,6 @@ static int si_cp_resume(struct radeon_device *rdev)
|
||||||
|
|
||||||
WREG32(CP_RB1_BASE, ring->gpu_addr >> 8);
|
WREG32(CP_RB1_BASE, ring->gpu_addr >> 8);
|
||||||
|
|
||||||
ring->rptr = RREG32(CP_RB1_RPTR);
|
|
||||||
|
|
||||||
/* ring2 - compute only */
|
/* ring2 - compute only */
|
||||||
/* Set ring buffer size */
|
/* Set ring buffer size */
|
||||||
ring = &rdev->ring[CAYMAN_RING_TYPE_CP2_INDEX];
|
ring = &rdev->ring[CAYMAN_RING_TYPE_CP2_INDEX];
|
||||||
|
@ -3486,8 +3482,6 @@ static int si_cp_resume(struct radeon_device *rdev)
|
||||||
|
|
||||||
WREG32(CP_RB2_BASE, ring->gpu_addr >> 8);
|
WREG32(CP_RB2_BASE, ring->gpu_addr >> 8);
|
||||||
|
|
||||||
ring->rptr = RREG32(CP_RB2_RPTR);
|
|
||||||
|
|
||||||
/* start the rings */
|
/* start the rings */
|
||||||
si_cp_start(rdev);
|
si_cp_start(rdev);
|
||||||
rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = true;
|
rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = true;
|
||||||
|
@ -3872,7 +3866,7 @@ bool si_gfx_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring)
|
||||||
if (!(reset_mask & (RADEON_RESET_GFX |
|
if (!(reset_mask & (RADEON_RESET_GFX |
|
||||||
RADEON_RESET_COMPUTE |
|
RADEON_RESET_COMPUTE |
|
||||||
RADEON_RESET_CP))) {
|
RADEON_RESET_CP))) {
|
||||||
radeon_ring_lockup_update(ring);
|
radeon_ring_lockup_update(rdev, ring);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
/* force CP activities */
|
/* force CP activities */
|
||||||
|
|
|
@ -49,7 +49,7 @@ bool si_dma_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring)
|
||||||
mask = RADEON_RESET_DMA1;
|
mask = RADEON_RESET_DMA1;
|
||||||
|
|
||||||
if (!(reset_mask & mask)) {
|
if (!(reset_mask & mask)) {
|
||||||
radeon_ring_lockup_update(ring);
|
radeon_ring_lockup_update(rdev, ring);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
/* force ring activities */
|
/* force ring activities */
|
||||||
|
|
|
@ -262,7 +262,7 @@ int uvd_v1_0_start(struct radeon_device *rdev)
|
||||||
/* Initialize the ring buffer's read and write pointers */
|
/* Initialize the ring buffer's read and write pointers */
|
||||||
WREG32(UVD_RBC_RB_RPTR, 0x0);
|
WREG32(UVD_RBC_RB_RPTR, 0x0);
|
||||||
|
|
||||||
ring->wptr = ring->rptr = RREG32(UVD_RBC_RB_RPTR);
|
ring->wptr = RREG32(UVD_RBC_RB_RPTR);
|
||||||
WREG32(UVD_RBC_RB_WPTR, ring->wptr);
|
WREG32(UVD_RBC_RB_WPTR, ring->wptr);
|
||||||
|
|
||||||
/* set the ring address */
|
/* set the ring address */
|
||||||
|
|
|
@ -98,14 +98,14 @@ int vce_v1_0_start(struct radeon_device *rdev)
|
||||||
WREG32_P(VCE_STATUS, 1, ~1);
|
WREG32_P(VCE_STATUS, 1, ~1);
|
||||||
|
|
||||||
ring = &rdev->ring[TN_RING_TYPE_VCE1_INDEX];
|
ring = &rdev->ring[TN_RING_TYPE_VCE1_INDEX];
|
||||||
WREG32(VCE_RB_RPTR, ring->rptr);
|
WREG32(VCE_RB_RPTR, ring->wptr);
|
||||||
WREG32(VCE_RB_WPTR, ring->wptr);
|
WREG32(VCE_RB_WPTR, ring->wptr);
|
||||||
WREG32(VCE_RB_BASE_LO, ring->gpu_addr);
|
WREG32(VCE_RB_BASE_LO, ring->gpu_addr);
|
||||||
WREG32(VCE_RB_BASE_HI, upper_32_bits(ring->gpu_addr));
|
WREG32(VCE_RB_BASE_HI, upper_32_bits(ring->gpu_addr));
|
||||||
WREG32(VCE_RB_SIZE, ring->ring_size / 4);
|
WREG32(VCE_RB_SIZE, ring->ring_size / 4);
|
||||||
|
|
||||||
ring = &rdev->ring[TN_RING_TYPE_VCE2_INDEX];
|
ring = &rdev->ring[TN_RING_TYPE_VCE2_INDEX];
|
||||||
WREG32(VCE_RB_RPTR2, ring->rptr);
|
WREG32(VCE_RB_RPTR2, ring->wptr);
|
||||||
WREG32(VCE_RB_WPTR2, ring->wptr);
|
WREG32(VCE_RB_WPTR2, ring->wptr);
|
||||||
WREG32(VCE_RB_BASE_LO2, ring->gpu_addr);
|
WREG32(VCE_RB_BASE_LO2, ring->gpu_addr);
|
||||||
WREG32(VCE_RB_BASE_HI2, upper_32_bits(ring->gpu_addr));
|
WREG32(VCE_RB_BASE_HI2, upper_32_bits(ring->gpu_addr));
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue