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

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>

+32 -53
+2 -5
drivers/gpu/drm/radeon/cik.c
··· 4031 4031 WREG32(CP_RB0_BASE, rb_addr); 4032 4032 WREG32(CP_RB0_BASE_HI, upper_32_bits(rb_addr)); 4033 4033 4034 - ring->rptr = RREG32(CP_RB0_RPTR); 4035 - 4036 4034 /* start the ring */ 4037 4035 cik_cp_gfx_start(rdev); 4038 4036 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = true; ··· 4585 4587 rdev->ring[idx].wptr = 0; 4586 4588 mqd->queue_state.cp_hqd_pq_wptr = rdev->ring[idx].wptr; 4587 4589 WREG32(CP_HQD_PQ_WPTR, mqd->queue_state.cp_hqd_pq_wptr); 4588 - rdev->ring[idx].rptr = RREG32(CP_HQD_PQ_RPTR); 4589 - mqd->queue_state.cp_hqd_pq_rptr = rdev->ring[idx].rptr; 4590 + mqd->queue_state.cp_hqd_pq_rptr = RREG32(CP_HQD_PQ_RPTR); 4590 4591 4591 4592 /* set the vmid for the queue */ 4592 4593 mqd->queue_state.cp_hqd_vmid = 0; ··· 5115 5118 if (!(reset_mask & (RADEON_RESET_GFX | 5116 5119 RADEON_RESET_COMPUTE | 5117 5120 RADEON_RESET_CP))) { 5118 - radeon_ring_lockup_update(ring); 5121 + radeon_ring_lockup_update(rdev, ring); 5119 5122 return false; 5120 5123 } 5121 5124 /* force CP activities */
+1 -3
drivers/gpu/drm/radeon/cik_sdma.c
··· 362 362 ring->wptr = 0; 363 363 WREG32(SDMA0_GFX_RB_WPTR + reg_offset, ring->wptr << 2); 364 364 365 - ring->rptr = RREG32(SDMA0_GFX_RB_RPTR + reg_offset) >> 2; 366 - 367 365 /* enable DMA RB */ 368 366 WREG32(SDMA0_GFX_RB_CNTL + reg_offset, rb_cntl | SDMA_RB_ENABLE); 369 367 ··· 711 713 mask = RADEON_RESET_DMA1; 712 714 713 715 if (!(reset_mask & mask)) { 714 - radeon_ring_lockup_update(ring); 716 + radeon_ring_lockup_update(rdev, ring); 715 717 return false; 716 718 } 717 719 /* force ring activities */
+1 -3
drivers/gpu/drm/radeon/evergreen.c
··· 2990 2990 WREG32(CP_RB_BASE, ring->gpu_addr >> 8); 2991 2991 WREG32(CP_DEBUG, (1 << 27) | (1 << 28)); 2992 2992 2993 - ring->rptr = RREG32(CP_RB_RPTR); 2994 - 2995 2993 evergreen_cp_start(rdev); 2996 2994 ring->ready = true; 2997 2995 r = radeon_ring_test(rdev, RADEON_RING_TYPE_GFX_INDEX, ring); ··· 3950 3952 if (!(reset_mask & (RADEON_RESET_GFX | 3951 3953 RADEON_RESET_COMPUTE | 3952 3954 RADEON_RESET_CP))) { 3953 - radeon_ring_lockup_update(ring); 3955 + radeon_ring_lockup_update(rdev, ring); 3954 3956 return false; 3955 3957 } 3956 3958 /* force CP activities */
+1 -1
drivers/gpu/drm/radeon/evergreen_dma.c
··· 174 174 u32 reset_mask = evergreen_gpu_check_soft_reset(rdev); 175 175 176 176 if (!(reset_mask & RADEON_RESET_DMA)) { 177 - radeon_ring_lockup_update(ring); 177 + radeon_ring_lockup_update(rdev, ring); 178 178 return false; 179 179 } 180 180 /* force ring activities */
+3 -3
drivers/gpu/drm/radeon/ni.c
··· 1642 1642 ring = &rdev->ring[ridx[i]]; 1643 1643 WREG32_P(cp_rb_cntl[i], RB_RPTR_WR_ENA, ~RB_RPTR_WR_ENA); 1644 1644 1645 - ring->rptr = ring->wptr = 0; 1646 - WREG32(cp_rb_rptr[i], ring->rptr); 1645 + ring->wptr = 0; 1646 + WREG32(cp_rb_rptr[i], 0); 1647 1647 WREG32(cp_rb_wptr[i], ring->wptr); 1648 1648 1649 1649 mdelay(1); ··· 1917 1917 if (!(reset_mask & (RADEON_RESET_GFX | 1918 1918 RADEON_RESET_COMPUTE | 1919 1919 RADEON_RESET_CP))) { 1920 - radeon_ring_lockup_update(ring); 1920 + radeon_ring_lockup_update(rdev, ring); 1921 1921 return false; 1922 1922 } 1923 1923 /* force CP activities */
+1 -3
drivers/gpu/drm/radeon/ni_dma.c
··· 248 248 ring->wptr = 0; 249 249 WREG32(DMA_RB_WPTR + reg_offset, ring->wptr << 2); 250 250 251 - ring->rptr = RREG32(DMA_RB_RPTR + reg_offset) >> 2; 252 - 253 251 WREG32(DMA_RB_CNTL + reg_offset, rb_cntl | DMA_RB_ENABLE); 254 252 255 253 ring->ready = true; ··· 300 302 mask = RADEON_RESET_DMA1; 301 303 302 304 if (!(reset_mask & mask)) { 303 - radeon_ring_lockup_update(ring); 305 + radeon_ring_lockup_update(rdev, ring); 304 306 return false; 305 307 } 306 308 /* force ring activities */
+1 -2
drivers/gpu/drm/radeon/r100.c
··· 1193 1193 1194 1194 WREG32(RADEON_CP_RB_CNTL, tmp); 1195 1195 udelay(10); 1196 - ring->rptr = RREG32(RADEON_CP_RB_RPTR); 1197 1196 /* Set cp mode to bus mastering & enable cp*/ 1198 1197 WREG32(RADEON_CP_CSQ_MODE, 1199 1198 REG_SET(RADEON_INDIRECT2_START, indirect2_start) | ··· 2522 2523 2523 2524 rbbm_status = RREG32(R_000E40_RBBM_STATUS); 2524 2525 if (!G_000E40_GUI_ACTIVE(rbbm_status)) { 2525 - radeon_ring_lockup_update(ring); 2526 + radeon_ring_lockup_update(rdev, ring); 2526 2527 return false; 2527 2528 } 2528 2529 /* force CP activities */
+1 -3
drivers/gpu/drm/radeon/r600.c
··· 1748 1748 if (!(reset_mask & (RADEON_RESET_GFX | 1749 1749 RADEON_RESET_COMPUTE | 1750 1750 RADEON_RESET_CP))) { 1751 - radeon_ring_lockup_update(ring); 1751 + radeon_ring_lockup_update(rdev, ring); 1752 1752 return false; 1753 1753 } 1754 1754 /* force CP activities */ ··· 2603 2603 2604 2604 WREG32(CP_RB_BASE, ring->gpu_addr >> 8); 2605 2605 WREG32(CP_DEBUG, (1 << 27) | (1 << 28)); 2606 - 2607 - ring->rptr = RREG32(CP_RB_RPTR); 2608 2606 2609 2607 r600_cp_start(rdev); 2610 2608 ring->ready = true;
+1 -3
drivers/gpu/drm/radeon/r600_dma.c
··· 176 176 ring->wptr = 0; 177 177 WREG32(DMA_RB_WPTR, ring->wptr << 2); 178 178 179 - ring->rptr = RREG32(DMA_RB_RPTR) >> 2; 180 - 181 179 WREG32(DMA_RB_CNTL, rb_cntl | DMA_RB_ENABLE); 182 180 183 181 ring->ready = true; ··· 219 221 u32 reset_mask = r600_gpu_check_soft_reset(rdev); 220 222 221 223 if (!(reset_mask & RADEON_RESET_DMA)) { 222 - radeon_ring_lockup_update(ring); 224 + radeon_ring_lockup_update(rdev, ring); 223 225 return false; 224 226 } 225 227 /* force ring activities */
+2 -2
drivers/gpu/drm/radeon/radeon.h
··· 793 793 struct radeon_ring { 794 794 struct radeon_bo *ring_obj; 795 795 volatile uint32_t *ring; 796 - unsigned rptr; 797 796 unsigned rptr_offs; 798 797 unsigned rptr_save_reg; 799 798 u64 next_rptr_gpu_addr; ··· 957 958 void radeon_ring_unlock_undo(struct radeon_device *rdev, struct radeon_ring *cp); 958 959 int radeon_ring_test(struct radeon_device *rdev, struct radeon_ring *cp); 959 960 void radeon_ring_force_activity(struct radeon_device *rdev, struct radeon_ring *ring); 960 - void radeon_ring_lockup_update(struct radeon_ring *ring); 961 + void radeon_ring_lockup_update(struct radeon_device *rdev, 962 + struct radeon_ring *ring); 961 963 bool radeon_ring_test_lockup(struct radeon_device *rdev, struct radeon_ring *ring); 962 964 unsigned radeon_ring_backup(struct radeon_device *rdev, struct radeon_ring *ring, 963 965 uint32_t **data);
+13 -14
drivers/gpu/drm/radeon/radeon_ring.c
··· 342 342 */ 343 343 void radeon_ring_free_size(struct radeon_device *rdev, struct radeon_ring *ring) 344 344 { 345 - ring->rptr = radeon_ring_get_rptr(rdev, ring); 345 + uint32_t rptr = radeon_ring_get_rptr(rdev, ring); 346 + 346 347 /* This works because ring_size is a power of 2 */ 347 - ring->ring_free_dw = (ring->rptr + (ring->ring_size / 4)); 348 + ring->ring_free_dw = rptr + (ring->ring_size / 4); 348 349 ring->ring_free_dw -= ring->wptr; 349 350 ring->ring_free_dw &= ring->ptr_mask; 350 351 if (!ring->ring_free_dw) { ··· 377 376 /* This is an empty ring update lockup info to avoid 378 377 * false positive. 379 378 */ 380 - radeon_ring_lockup_update(ring); 379 + radeon_ring_lockup_update(rdev, ring); 381 380 } 382 381 ndw = (ndw + ring->align_mask) & ~ring->align_mask; 383 382 while (ndw > (ring->ring_free_dw - 1)) { ··· 491 490 { 492 491 int r; 493 492 494 - radeon_ring_free_size(rdev, ring); 495 - if (ring->rptr == ring->wptr) { 493 + if (radeon_ring_get_rptr(rdev, ring) == ring->wptr) { 496 494 r = radeon_ring_alloc(rdev, ring, 1); 497 495 if (!r) { 498 496 radeon_ring_write(ring, ring->nop); ··· 507 507 * 508 508 * Update the last rptr value and timestamp (all asics). 509 509 */ 510 - void radeon_ring_lockup_update(struct radeon_ring *ring) 510 + void radeon_ring_lockup_update(struct radeon_device *rdev, 511 + struct radeon_ring *ring) 511 512 { 512 - ring->last_rptr = ring->rptr; 513 + ring->last_rptr = radeon_ring_get_rptr(rdev, ring); 513 514 ring->last_activity = jiffies; 514 515 } 515 516 ··· 536 535 **/ 537 536 bool radeon_ring_test_lockup(struct radeon_device *rdev, struct radeon_ring *ring) 538 537 { 538 + uint32_t rptr = radeon_ring_get_rptr(rdev, ring); 539 539 unsigned long cjiffies, elapsed; 540 540 541 541 cjiffies = jiffies; 542 542 if (!time_after(cjiffies, ring->last_activity)) { 543 543 /* likely a wrap around */ 544 - radeon_ring_lockup_update(ring); 544 + radeon_ring_lockup_update(rdev, ring); 545 545 return false; 546 546 } 547 - ring->rptr = radeon_ring_get_rptr(rdev, ring); 548 - if (ring->rptr != ring->last_rptr) { 547 + if (rptr != ring->last_rptr) { 549 548 /* CP is still working no lockup */ 550 - radeon_ring_lockup_update(ring); 549 + radeon_ring_lockup_update(rdev, ring); 551 550 return false; 552 551 } 553 552 elapsed = jiffies_to_msecs(cjiffies - ring->last_activity); ··· 710 709 if (radeon_debugfs_ring_init(rdev, ring)) { 711 710 DRM_ERROR("Failed to register debugfs file for rings !\n"); 712 711 } 713 - radeon_ring_lockup_update(ring); 712 + radeon_ring_lockup_update(rdev, ring); 714 713 return 0; 715 714 } 716 715 ··· 781 780 782 781 seq_printf(m, "driver's copy of the wptr: 0x%08x [%5d]\n", 783 782 ring->wptr, ring->wptr); 784 - seq_printf(m, "driver's copy of the rptr: 0x%08x [%5d]\n", 785 - ring->rptr, ring->rptr); 786 783 seq_printf(m, "last semaphore signal addr : 0x%016llx\n", 787 784 ring->last_semaphore_signal_addr); 788 785 seq_printf(m, "last semaphore wait addr : 0x%016llx\n",
+1 -7
drivers/gpu/drm/radeon/si.c
··· 3434 3434 3435 3435 WREG32(CP_RB0_BASE, ring->gpu_addr >> 8); 3436 3436 3437 - ring->rptr = RREG32(CP_RB0_RPTR); 3438 - 3439 3437 /* ring1 - compute only */ 3440 3438 /* Set ring buffer size */ 3441 3439 ring = &rdev->ring[CAYMAN_RING_TYPE_CP1_INDEX]; ··· 3458 3460 3459 3461 WREG32(CP_RB1_BASE, ring->gpu_addr >> 8); 3460 3462 3461 - ring->rptr = RREG32(CP_RB1_RPTR); 3462 - 3463 3463 /* ring2 - compute only */ 3464 3464 /* Set ring buffer size */ 3465 3465 ring = &rdev->ring[CAYMAN_RING_TYPE_CP2_INDEX]; ··· 3481 3485 WREG32(CP_RB2_CNTL, tmp); 3482 3486 3483 3487 WREG32(CP_RB2_BASE, ring->gpu_addr >> 8); 3484 - 3485 - ring->rptr = RREG32(CP_RB2_RPTR); 3486 3488 3487 3489 /* start the rings */ 3488 3490 si_cp_start(rdev); ··· 3866 3872 if (!(reset_mask & (RADEON_RESET_GFX | 3867 3873 RADEON_RESET_COMPUTE | 3868 3874 RADEON_RESET_CP))) { 3869 - radeon_ring_lockup_update(ring); 3875 + radeon_ring_lockup_update(rdev, ring); 3870 3876 return false; 3871 3877 } 3872 3878 /* force CP activities */
+1 -1
drivers/gpu/drm/radeon/si_dma.c
··· 49 49 mask = RADEON_RESET_DMA1; 50 50 51 51 if (!(reset_mask & mask)) { 52 - radeon_ring_lockup_update(ring); 52 + radeon_ring_lockup_update(rdev, ring); 53 53 return false; 54 54 } 55 55 /* force ring activities */
+1 -1
drivers/gpu/drm/radeon/uvd_v1_0.c
··· 262 262 /* Initialize the ring buffer's read and write pointers */ 263 263 WREG32(UVD_RBC_RB_RPTR, 0x0); 264 264 265 - ring->wptr = ring->rptr = RREG32(UVD_RBC_RB_RPTR); 265 + ring->wptr = RREG32(UVD_RBC_RB_RPTR); 266 266 WREG32(UVD_RBC_RB_WPTR, ring->wptr); 267 267 268 268 /* set the ring address */
+2 -2
drivers/gpu/drm/radeon/vce_v1_0.c
··· 98 98 WREG32_P(VCE_STATUS, 1, ~1); 99 99 100 100 ring = &rdev->ring[TN_RING_TYPE_VCE1_INDEX]; 101 - WREG32(VCE_RB_RPTR, ring->rptr); 101 + WREG32(VCE_RB_RPTR, ring->wptr); 102 102 WREG32(VCE_RB_WPTR, ring->wptr); 103 103 WREG32(VCE_RB_BASE_LO, ring->gpu_addr); 104 104 WREG32(VCE_RB_BASE_HI, upper_32_bits(ring->gpu_addr)); 105 105 WREG32(VCE_RB_SIZE, ring->ring_size / 4); 106 106 107 107 ring = &rdev->ring[TN_RING_TYPE_VCE2_INDEX]; 108 - WREG32(VCE_RB_RPTR2, ring->rptr); 108 + WREG32(VCE_RB_RPTR2, ring->wptr); 109 109 WREG32(VCE_RB_WPTR2, ring->wptr); 110 110 WREG32(VCE_RB_BASE_LO2, ring->gpu_addr); 111 111 WREG32(VCE_RB_BASE_HI2, upper_32_bits(ring->gpu_addr));