···342342 */343343void radeon_ring_free_size(struct radeon_device *rdev, struct radeon_ring *ring)344344{345345- ring->rptr = radeon_ring_get_rptr(rdev, ring);345345+ uint32_t rptr = radeon_ring_get_rptr(rdev, ring);346346+346347 /* This works because ring_size is a power of 2 */347347- ring->ring_free_dw = (ring->rptr + (ring->ring_size / 4));348348+ ring->ring_free_dw = rptr + (ring->ring_size / 4);348349 ring->ring_free_dw -= ring->wptr;349350 ring->ring_free_dw &= ring->ptr_mask;350351 if (!ring->ring_free_dw) {···377376 /* This is an empty ring update lockup info to avoid378377 * false positive.379378 */380380- radeon_ring_lockup_update(ring);379379+ radeon_ring_lockup_update(rdev, ring);381380 }382381 ndw = (ndw + ring->align_mask) & ~ring->align_mask;383382 while (ndw > (ring->ring_free_dw - 1)) {···491490{492491 int r;493492494494- radeon_ring_free_size(rdev, ring);495495- if (ring->rptr == ring->wptr) {493493+ if (radeon_ring_get_rptr(rdev, ring) == ring->wptr) {496494 r = radeon_ring_alloc(rdev, ring, 1);497495 if (!r) {498496 radeon_ring_write(ring, ring->nop);···507507 *508508 * Update the last rptr value and timestamp (all asics).509509 */510510-void radeon_ring_lockup_update(struct radeon_ring *ring)510510+void radeon_ring_lockup_update(struct radeon_device *rdev,511511+ struct radeon_ring *ring)511512{512512- ring->last_rptr = ring->rptr;513513+ ring->last_rptr = radeon_ring_get_rptr(rdev, ring);513514 ring->last_activity = jiffies;514515}515516···536535 **/537536bool radeon_ring_test_lockup(struct radeon_device *rdev, struct radeon_ring *ring)538537{538538+ uint32_t rptr = radeon_ring_get_rptr(rdev, ring);539539 unsigned long cjiffies, elapsed;540540541541 cjiffies = jiffies;542542 if (!time_after(cjiffies, ring->last_activity)) {543543 /* likely a wrap around */544544- radeon_ring_lockup_update(ring);544544+ radeon_ring_lockup_update(rdev, ring);545545 return false;546546 }547547- ring->rptr = radeon_ring_get_rptr(rdev, ring);548548- if (ring->rptr != ring->last_rptr) {547547+ if (rptr != ring->last_rptr) {549548 /* CP is still working no lockup */550550- radeon_ring_lockup_update(ring);549549+ radeon_ring_lockup_update(rdev, ring);551550 return false;552551 }553552 elapsed = jiffies_to_msecs(cjiffies - ring->last_activity);···710709 if (radeon_debugfs_ring_init(rdev, ring)) {711710 DRM_ERROR("Failed to register debugfs file for rings !\n");712711 }713713- radeon_ring_lockup_update(ring);712712+ radeon_ring_lockup_update(rdev, ring);714713 return 0;715714}716715···781780782781 seq_printf(m, "driver's copy of the wptr: 0x%08x [%5d]\n",783782 ring->wptr, ring->wptr);784784- seq_printf(m, "driver's copy of the rptr: 0x%08x [%5d]\n",785785- ring->rptr, ring->rptr);786783 seq_printf(m, "last semaphore signal addr : 0x%016llx\n",787784 ring->last_semaphore_signal_addr);788785 seq_printf(m, "last semaphore wait addr : 0x%016llx\n",
+1-7
drivers/gpu/drm/radeon/si.c
···3434343434353435 WREG32(CP_RB0_BASE, ring->gpu_addr >> 8);3436343634373437- ring->rptr = RREG32(CP_RB0_RPTR);34383438-34393437 /* ring1 - compute only */34403438 /* Set ring buffer size */34413439 ring = &rdev->ring[CAYMAN_RING_TYPE_CP1_INDEX];···3458346034593461 WREG32(CP_RB1_BASE, ring->gpu_addr >> 8);3460346234613461- ring->rptr = RREG32(CP_RB1_RPTR);34623462-34633463 /* ring2 - compute only */34643464 /* Set ring buffer size */34653465 ring = &rdev->ring[CAYMAN_RING_TYPE_CP2_INDEX];···34813485 WREG32(CP_RB2_CNTL, tmp);3482348634833487 WREG32(CP_RB2_BASE, ring->gpu_addr >> 8);34843484-34853485- ring->rptr = RREG32(CP_RB2_RPTR);3486348834873489 /* start the rings */34883490 si_cp_start(rdev);···38663872 if (!(reset_mask & (RADEON_RESET_GFX |38673873 RADEON_RESET_COMPUTE |38683874 RADEON_RESET_CP))) {38693869- radeon_ring_lockup_update(ring);38753875+ radeon_ring_lockup_update(rdev, ring);38703876 return false;38713877 }38723878 /* force CP activities */
+1-1
drivers/gpu/drm/radeon/si_dma.c
···4949 mask = RADEON_RESET_DMA1;50505151 if (!(reset_mask & mask)) {5252- radeon_ring_lockup_update(ring);5252+ radeon_ring_lockup_update(rdev, ring);5353 return false;5454 }5555 /* force ring activities */
+1-1
drivers/gpu/drm/radeon/uvd_v1_0.c
···262262 /* Initialize the ring buffer's read and write pointers */263263 WREG32(UVD_RBC_RB_RPTR, 0x0);264264265265- ring->wptr = ring->rptr = RREG32(UVD_RBC_RB_RPTR);265265+ ring->wptr = RREG32(UVD_RBC_RB_RPTR);266266 WREG32(UVD_RBC_RB_WPTR, ring->wptr);267267268268 /* set the ring address */