On Mon, Aug 18, 2014 at 4:34 AM, Michel Dänzer <michel@xxxxxxxxxxx> wrote: > From: Michel Dänzer <michel.daenzer@xxxxxxx> > > It isn't necessary for command streams generated by the kernel (at least > not while we aren't storing ring or indirect buffers in VRAM). > > Signed-off-by: Michel Dänzer <michel.daenzer@xxxxxxx> Applied to my fixes tree. Thanks! Alex > --- > drivers/gpu/drm/radeon/cik.c | 8 ++++---- > drivers/gpu/drm/radeon/cik_sdma.c | 6 +++--- > drivers/gpu/drm/radeon/evergreen.c | 4 ++-- > drivers/gpu/drm/radeon/evergreen_dma.c | 2 +- > drivers/gpu/drm/radeon/ni.c | 4 ++-- > drivers/gpu/drm/radeon/r100.c | 8 ++++---- > drivers/gpu/drm/radeon/r200.c | 2 +- > drivers/gpu/drm/radeon/r300.c | 2 +- > drivers/gpu/drm/radeon/r420.c | 4 ++-- > drivers/gpu/drm/radeon/r600.c | 8 ++++---- > drivers/gpu/drm/radeon/r600_dma.c | 6 +++--- > drivers/gpu/drm/radeon/radeon.h | 8 +++++--- > drivers/gpu/drm/radeon/radeon_cs.c | 6 +++--- > drivers/gpu/drm/radeon/radeon_ib.c | 5 +++-- > drivers/gpu/drm/radeon/radeon_ring.c | 16 ++++++++++------ > drivers/gpu/drm/radeon/radeon_semaphore.c | 2 +- > drivers/gpu/drm/radeon/radeon_test.c | 18 +++++++++--------- > drivers/gpu/drm/radeon/radeon_uvd.c | 2 +- > drivers/gpu/drm/radeon/radeon_vce.c | 6 +++--- > drivers/gpu/drm/radeon/radeon_vm.c | 6 +++--- > drivers/gpu/drm/radeon/rv515.c | 2 +- > drivers/gpu/drm/radeon/rv770_dma.c | 2 +- > drivers/gpu/drm/radeon/si.c | 6 +++--- > drivers/gpu/drm/radeon/si_dma.c | 2 +- > drivers/gpu/drm/radeon/uvd_v1_0.c | 4 ++-- > 25 files changed, 73 insertions(+), 66 deletions(-) > > diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c > index b625646..81d07e6 100644 > --- a/drivers/gpu/drm/radeon/cik.c > +++ b/drivers/gpu/drm/radeon/cik.c > @@ -3801,7 +3801,7 @@ int cik_ring_test(struct radeon_device *rdev, struct radeon_ring *ring) > radeon_ring_write(ring, PACKET3(PACKET3_SET_UCONFIG_REG, 1)); > radeon_ring_write(ring, ((scratch - PACKET3_SET_UCONFIG_REG_START) >> 2)); > radeon_ring_write(ring, 0xDEADBEEF); > - radeon_ring_unlock_commit(rdev, ring); > + radeon_ring_unlock_commit(rdev, ring, false); > > for (i = 0; i < rdev->usec_timeout; i++) { > tmp = RREG32(scratch); > @@ -4004,7 +4004,7 @@ int cik_copy_cpdma(struct radeon_device *rdev, > return r; > } > > - radeon_ring_unlock_commit(rdev, ring); > + radeon_ring_unlock_commit(rdev, ring, false); > radeon_semaphore_free(rdev, &sem, *fence); > > return r; > @@ -4103,7 +4103,7 @@ int cik_ib_test(struct radeon_device *rdev, struct radeon_ring *ring) > ib.ptr[1] = ((scratch - PACKET3_SET_UCONFIG_REG_START) >> 2); > ib.ptr[2] = 0xDEADBEEF; > ib.length_dw = 3; > - r = radeon_ib_schedule(rdev, &ib, NULL); > + r = radeon_ib_schedule(rdev, &ib, NULL, false); > if (r) { > radeon_scratch_free(rdev, scratch); > radeon_ib_free(rdev, &ib); > @@ -4324,7 +4324,7 @@ static int cik_cp_gfx_start(struct radeon_device *rdev) > radeon_ring_write(ring, 0x0000000e); /* VGT_VERTEX_REUSE_BLOCK_CNTL */ > radeon_ring_write(ring, 0x00000010); /* VGT_OUT_DEALLOC_CNTL */ > > - radeon_ring_unlock_commit(rdev, ring); > + radeon_ring_unlock_commit(rdev, ring, false); > > return 0; > } > diff --git a/drivers/gpu/drm/radeon/cik_sdma.c b/drivers/gpu/drm/radeon/cik_sdma.c > index bcf4805..192278b 100644 > --- a/drivers/gpu/drm/radeon/cik_sdma.c > +++ b/drivers/gpu/drm/radeon/cik_sdma.c > @@ -596,7 +596,7 @@ int cik_copy_dma(struct radeon_device *rdev, > return r; > } > > - radeon_ring_unlock_commit(rdev, ring); > + radeon_ring_unlock_commit(rdev, ring, false); > radeon_semaphore_free(rdev, &sem, *fence); > > return r; > @@ -638,7 +638,7 @@ int cik_sdma_ring_test(struct radeon_device *rdev, > radeon_ring_write(ring, upper_32_bits(rdev->vram_scratch.gpu_addr)); > radeon_ring_write(ring, 1); /* number of DWs to follow */ > radeon_ring_write(ring, 0xDEADBEEF); > - radeon_ring_unlock_commit(rdev, ring); > + radeon_ring_unlock_commit(rdev, ring, false); > > for (i = 0; i < rdev->usec_timeout; i++) { > tmp = readl(ptr); > @@ -695,7 +695,7 @@ int cik_sdma_ib_test(struct radeon_device *rdev, struct radeon_ring *ring) > ib.ptr[4] = 0xDEADBEEF; > ib.length_dw = 5; > > - r = radeon_ib_schedule(rdev, &ib, NULL); > + r = radeon_ib_schedule(rdev, &ib, NULL, false); > if (r) { > radeon_ib_free(rdev, &ib); > DRM_ERROR("radeon: failed to schedule ib (%d).\n", r); > diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c > index 4fedd14..dbca60c 100644 > --- a/drivers/gpu/drm/radeon/evergreen.c > +++ b/drivers/gpu/drm/radeon/evergreen.c > @@ -2869,7 +2869,7 @@ static int evergreen_cp_start(struct radeon_device *rdev) > radeon_ring_write(ring, PACKET3_ME_INITIALIZE_DEVICE_ID(1)); > radeon_ring_write(ring, 0); > radeon_ring_write(ring, 0); > - radeon_ring_unlock_commit(rdev, ring); > + radeon_ring_unlock_commit(rdev, ring, false); > > cp_me = 0xff; > WREG32(CP_ME_CNTL, cp_me); > @@ -2912,7 +2912,7 @@ static int evergreen_cp_start(struct radeon_device *rdev) > radeon_ring_write(ring, 0x0000000e); /* VGT_VERTEX_REUSE_BLOCK_CNTL */ > radeon_ring_write(ring, 0x00000010); /* */ > > - radeon_ring_unlock_commit(rdev, ring); > + radeon_ring_unlock_commit(rdev, ring, false); > > return 0; > } > diff --git a/drivers/gpu/drm/radeon/evergreen_dma.c b/drivers/gpu/drm/radeon/evergreen_dma.c > index 478caef..afaba38 100644 > --- a/drivers/gpu/drm/radeon/evergreen_dma.c > +++ b/drivers/gpu/drm/radeon/evergreen_dma.c > @@ -155,7 +155,7 @@ int evergreen_copy_dma(struct radeon_device *rdev, > return r; > } > > - radeon_ring_unlock_commit(rdev, ring); > + radeon_ring_unlock_commit(rdev, ring, false); > radeon_semaphore_free(rdev, &sem, *fence); > > return r; > diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c > index 327b85f..ba89375 100644 > --- a/drivers/gpu/drm/radeon/ni.c > +++ b/drivers/gpu/drm/radeon/ni.c > @@ -1505,7 +1505,7 @@ static int cayman_cp_start(struct radeon_device *rdev) > radeon_ring_write(ring, PACKET3_ME_INITIALIZE_DEVICE_ID(1)); > radeon_ring_write(ring, 0); > radeon_ring_write(ring, 0); > - radeon_ring_unlock_commit(rdev, ring); > + radeon_ring_unlock_commit(rdev, ring, false); > > cayman_cp_enable(rdev, true); > > @@ -1547,7 +1547,7 @@ static int cayman_cp_start(struct radeon_device *rdev) > radeon_ring_write(ring, 0x0000000e); /* VGT_VERTEX_REUSE_BLOCK_CNTL */ > radeon_ring_write(ring, 0x00000010); /* */ > > - radeon_ring_unlock_commit(rdev, ring); > + radeon_ring_unlock_commit(rdev, ring, false); > > /* XXX init other rings */ > > diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c > index 04b5940..4c5ec44 100644 > --- a/drivers/gpu/drm/radeon/r100.c > +++ b/drivers/gpu/drm/radeon/r100.c > @@ -925,7 +925,7 @@ int r100_copy_blit(struct radeon_device *rdev, > if (fence) { > r = radeon_fence_emit(rdev, fence, RADEON_RING_TYPE_GFX_INDEX); > } > - radeon_ring_unlock_commit(rdev, ring); > + radeon_ring_unlock_commit(rdev, ring, false); > return r; > } > > @@ -958,7 +958,7 @@ void r100_ring_start(struct radeon_device *rdev, struct radeon_ring *ring) > RADEON_ISYNC_ANY3D_IDLE2D | > RADEON_ISYNC_WAIT_IDLEGUI | > RADEON_ISYNC_CPSCRATCH_IDLEGUI); > - radeon_ring_unlock_commit(rdev, ring); > + radeon_ring_unlock_commit(rdev, ring, false); > } > > > @@ -3638,7 +3638,7 @@ int r100_ring_test(struct radeon_device *rdev, struct radeon_ring *ring) > } > radeon_ring_write(ring, PACKET0(scratch, 0)); > radeon_ring_write(ring, 0xDEADBEEF); > - radeon_ring_unlock_commit(rdev, ring); > + radeon_ring_unlock_commit(rdev, ring, false); > for (i = 0; i < rdev->usec_timeout; i++) { > tmp = RREG32(scratch); > if (tmp == 0xDEADBEEF) { > @@ -3700,7 +3700,7 @@ int r100_ib_test(struct radeon_device *rdev, struct radeon_ring *ring) > ib.ptr[6] = PACKET2(0); > ib.ptr[7] = PACKET2(0); > ib.length_dw = 8; > - r = radeon_ib_schedule(rdev, &ib, NULL); > + r = radeon_ib_schedule(rdev, &ib, NULL, false); > if (r) { > DRM_ERROR("radeon: failed to schedule ib (%d).\n", r); > goto free_ib; > diff --git a/drivers/gpu/drm/radeon/r200.c b/drivers/gpu/drm/radeon/r200.c > index 58f0473..6778037 100644 > --- a/drivers/gpu/drm/radeon/r200.c > +++ b/drivers/gpu/drm/radeon/r200.c > @@ -121,7 +121,7 @@ int r200_copy_dma(struct radeon_device *rdev, > if (fence) { > r = radeon_fence_emit(rdev, fence, RADEON_RING_TYPE_GFX_INDEX); > } > - radeon_ring_unlock_commit(rdev, ring); > + radeon_ring_unlock_commit(rdev, ring, false); > return r; > } > > diff --git a/drivers/gpu/drm/radeon/r300.c b/drivers/gpu/drm/radeon/r300.c > index 75b3033..1bc4704 100644 > --- a/drivers/gpu/drm/radeon/r300.c > +++ b/drivers/gpu/drm/radeon/r300.c > @@ -295,7 +295,7 @@ void r300_ring_start(struct radeon_device *rdev, struct radeon_ring *ring) > radeon_ring_write(ring, > R300_GEOMETRY_ROUND_NEAREST | > R300_COLOR_ROUND_NEAREST); > - radeon_ring_unlock_commit(rdev, ring); > + radeon_ring_unlock_commit(rdev, ring, false); > } > > static void r300_errata(struct radeon_device *rdev) > diff --git a/drivers/gpu/drm/radeon/r420.c b/drivers/gpu/drm/radeon/r420.c > index 802b192..2828605 100644 > --- a/drivers/gpu/drm/radeon/r420.c > +++ b/drivers/gpu/drm/radeon/r420.c > @@ -219,7 +219,7 @@ static void r420_cp_errata_init(struct radeon_device *rdev) > radeon_ring_write(ring, PACKET0(R300_CP_RESYNC_ADDR, 1)); > radeon_ring_write(ring, rdev->config.r300.resync_scratch); > radeon_ring_write(ring, 0xDEADBEEF); > - radeon_ring_unlock_commit(rdev, ring); > + radeon_ring_unlock_commit(rdev, ring, false); > } > > static void r420_cp_errata_fini(struct radeon_device *rdev) > @@ -232,7 +232,7 @@ static void r420_cp_errata_fini(struct radeon_device *rdev) > radeon_ring_lock(rdev, ring, 8); > radeon_ring_write(ring, PACKET0(R300_RB3D_DSTCACHE_CTLSTAT, 0)); > radeon_ring_write(ring, R300_RB3D_DC_FINISH); > - radeon_ring_unlock_commit(rdev, ring); > + radeon_ring_unlock_commit(rdev, ring, false); > radeon_scratch_free(rdev, rdev->config.r300.resync_scratch); > } > > diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c > index c70a504..1e47701 100644 > --- a/drivers/gpu/drm/radeon/r600.c > +++ b/drivers/gpu/drm/radeon/r600.c > @@ -2547,7 +2547,7 @@ int r600_cp_start(struct radeon_device *rdev) > radeon_ring_write(ring, PACKET3_ME_INITIALIZE_DEVICE_ID(1)); > radeon_ring_write(ring, 0); > radeon_ring_write(ring, 0); > - radeon_ring_unlock_commit(rdev, ring); > + radeon_ring_unlock_commit(rdev, ring, false); > > cp_me = 0xff; > WREG32(R_0086D8_CP_ME_CNTL, cp_me); > @@ -2683,7 +2683,7 @@ int r600_ring_test(struct radeon_device *rdev, struct radeon_ring *ring) > radeon_ring_write(ring, PACKET3(PACKET3_SET_CONFIG_REG, 1)); > radeon_ring_write(ring, ((scratch - PACKET3_SET_CONFIG_REG_OFFSET) >> 2)); > radeon_ring_write(ring, 0xDEADBEEF); > - radeon_ring_unlock_commit(rdev, ring); > + radeon_ring_unlock_commit(rdev, ring, false); > for (i = 0; i < rdev->usec_timeout; i++) { > tmp = RREG32(scratch); > if (tmp == 0xDEADBEEF) > @@ -2845,7 +2845,7 @@ int r600_copy_cpdma(struct radeon_device *rdev, > return r; > } > > - radeon_ring_unlock_commit(rdev, ring); > + radeon_ring_unlock_commit(rdev, ring, false); > radeon_semaphore_free(rdev, &sem, *fence); > > return r; > @@ -3165,7 +3165,7 @@ int r600_ib_test(struct radeon_device *rdev, struct radeon_ring *ring) > ib.ptr[1] = ((scratch - PACKET3_SET_CONFIG_REG_OFFSET) >> 2); > ib.ptr[2] = 0xDEADBEEF; > ib.length_dw = 3; > - r = radeon_ib_schedule(rdev, &ib, NULL); > + r = radeon_ib_schedule(rdev, &ib, NULL, false); > if (r) { > DRM_ERROR("radeon: failed to schedule ib (%d).\n", r); > goto free_ib; > diff --git a/drivers/gpu/drm/radeon/r600_dma.c b/drivers/gpu/drm/radeon/r600_dma.c > index 4969cef..51fd985 100644 > --- a/drivers/gpu/drm/radeon/r600_dma.c > +++ b/drivers/gpu/drm/radeon/r600_dma.c > @@ -261,7 +261,7 @@ int r600_dma_ring_test(struct radeon_device *rdev, > radeon_ring_write(ring, rdev->vram_scratch.gpu_addr & 0xfffffffc); > radeon_ring_write(ring, upper_32_bits(rdev->vram_scratch.gpu_addr) & 0xff); > radeon_ring_write(ring, 0xDEADBEEF); > - radeon_ring_unlock_commit(rdev, ring); > + radeon_ring_unlock_commit(rdev, ring, false); > > for (i = 0; i < rdev->usec_timeout; i++) { > tmp = readl(ptr); > @@ -368,7 +368,7 @@ int r600_dma_ib_test(struct radeon_device *rdev, struct radeon_ring *ring) > ib.ptr[3] = 0xDEADBEEF; > ib.length_dw = 4; > > - r = radeon_ib_schedule(rdev, &ib, NULL); > + r = radeon_ib_schedule(rdev, &ib, NULL, false); > if (r) { > radeon_ib_free(rdev, &ib); > DRM_ERROR("radeon: failed to schedule ib (%d).\n", r); > @@ -493,7 +493,7 @@ int r600_copy_dma(struct radeon_device *rdev, > return r; > } > > - radeon_ring_unlock_commit(rdev, ring); > + radeon_ring_unlock_commit(rdev, ring, false); > radeon_semaphore_free(rdev, &sem, *fence); > > return r; > diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h > index 9e1732e..706c69a 100644 > --- a/drivers/gpu/drm/radeon/radeon.h > +++ b/drivers/gpu/drm/radeon/radeon.h > @@ -967,7 +967,7 @@ int radeon_ib_get(struct radeon_device *rdev, int ring, > unsigned size); > void radeon_ib_free(struct radeon_device *rdev, struct radeon_ib *ib); > int radeon_ib_schedule(struct radeon_device *rdev, struct radeon_ib *ib, > - struct radeon_ib *const_ib); > + struct radeon_ib *const_ib, bool hdp_flush); > int radeon_ib_pool_init(struct radeon_device *rdev); > void radeon_ib_pool_fini(struct radeon_device *rdev); > int radeon_ib_ring_tests(struct radeon_device *rdev); > @@ -977,8 +977,10 @@ bool radeon_ring_supports_scratch_reg(struct radeon_device *rdev, > void radeon_ring_free_size(struct radeon_device *rdev, struct radeon_ring *cp); > int radeon_ring_alloc(struct radeon_device *rdev, struct radeon_ring *cp, unsigned ndw); > int radeon_ring_lock(struct radeon_device *rdev, struct radeon_ring *cp, unsigned ndw); > -void radeon_ring_commit(struct radeon_device *rdev, struct radeon_ring *cp); > -void radeon_ring_unlock_commit(struct radeon_device *rdev, struct radeon_ring *cp); > +void radeon_ring_commit(struct radeon_device *rdev, struct radeon_ring *cp, > + bool hdp_flush); > +void radeon_ring_unlock_commit(struct radeon_device *rdev, struct radeon_ring *cp, > + bool hdp_flush); > void radeon_ring_undo(struct radeon_ring *ring); > 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); > diff --git a/drivers/gpu/drm/radeon/radeon_cs.c b/drivers/gpu/drm/radeon/radeon_cs.c > index ee712c1..7a1ea99 100644 > --- a/drivers/gpu/drm/radeon/radeon_cs.c > +++ b/drivers/gpu/drm/radeon/radeon_cs.c > @@ -450,7 +450,7 @@ static int radeon_cs_ib_chunk(struct radeon_device *rdev, > radeon_vce_note_usage(rdev); > > radeon_cs_sync_rings(parser); > - r = radeon_ib_schedule(rdev, &parser->ib, NULL); > + r = radeon_ib_schedule(rdev, &parser->ib, NULL, true); > if (r) { > DRM_ERROR("Failed to schedule IB !\n"); > } > @@ -541,9 +541,9 @@ static int radeon_cs_ib_vm_chunk(struct radeon_device *rdev, > > if ((rdev->family >= CHIP_TAHITI) && > (parser->chunk_const_ib_idx != -1)) { > - r = radeon_ib_schedule(rdev, &parser->ib, &parser->const_ib); > + r = radeon_ib_schedule(rdev, &parser->ib, &parser->const_ib, true); > } else { > - r = radeon_ib_schedule(rdev, &parser->ib, NULL); > + r = radeon_ib_schedule(rdev, &parser->ib, NULL, true); > } > > out: > diff --git a/drivers/gpu/drm/radeon/radeon_ib.c b/drivers/gpu/drm/radeon/radeon_ib.c > index 65b0c21..5bf2c0a 100644 > --- a/drivers/gpu/drm/radeon/radeon_ib.c > +++ b/drivers/gpu/drm/radeon/radeon_ib.c > @@ -107,6 +107,7 @@ void radeon_ib_free(struct radeon_device *rdev, struct radeon_ib *ib) > * @rdev: radeon_device pointer > * @ib: IB object to schedule > * @const_ib: Const IB to schedule (SI only) > + * @hdp_flush: Whether or not to perform an HDP cache flush > * > * Schedule an IB on the associated ring (all asics). > * Returns 0 on success, error on failure. > @@ -122,7 +123,7 @@ void radeon_ib_free(struct radeon_device *rdev, struct radeon_ib *ib) > * to SI there was just a DE IB. > */ > int radeon_ib_schedule(struct radeon_device *rdev, struct radeon_ib *ib, > - struct radeon_ib *const_ib) > + struct radeon_ib *const_ib, bool hdp_flush) > { > struct radeon_ring *ring = &rdev->ring[ib->ring]; > int r = 0; > @@ -176,7 +177,7 @@ int radeon_ib_schedule(struct radeon_device *rdev, struct radeon_ib *ib, > if (ib->vm) > radeon_vm_fence(rdev, ib->vm, ib->fence); > > - radeon_ring_unlock_commit(rdev, ring); > + radeon_ring_unlock_commit(rdev, ring, hdp_flush); > return 0; > } > > diff --git a/drivers/gpu/drm/radeon/radeon_ring.c b/drivers/gpu/drm/radeon/radeon_ring.c > index 5b4e0cf..0678998 100644 > --- a/drivers/gpu/drm/radeon/radeon_ring.c > +++ b/drivers/gpu/drm/radeon/radeon_ring.c > @@ -177,16 +177,18 @@ int radeon_ring_lock(struct radeon_device *rdev, struct radeon_ring *ring, unsig > * > * @rdev: radeon_device pointer > * @ring: radeon_ring structure holding ring information > + * @hdp_flush: Whether or not to perform an HDP cache flush > * > * Update the wptr (write pointer) to tell the GPU to > * execute new commands on the ring buffer (all asics). > */ > -void radeon_ring_commit(struct radeon_device *rdev, struct radeon_ring *ring) > +void radeon_ring_commit(struct radeon_device *rdev, struct radeon_ring *ring, > + bool hdp_flush) > { > /* If we are emitting the HDP flush via the ring buffer, we need to > * do it before padding. > */ > - if (rdev->asic->ring[ring->idx]->hdp_flush) > + if (hdp_flush && rdev->asic->ring[ring->idx]->hdp_flush) > rdev->asic->ring[ring->idx]->hdp_flush(rdev, ring); > /* We pad to match fetch size */ > while (ring->wptr & ring->align_mask) { > @@ -196,7 +198,7 @@ void radeon_ring_commit(struct radeon_device *rdev, struct radeon_ring *ring) > /* If we are emitting the HDP flush via MMIO, we need to do it after > * all CPU writes to VRAM finished. > */ > - if (rdev->asic->mmio_hdp_flush) > + if (hdp_flush && rdev->asic->mmio_hdp_flush) > rdev->asic->mmio_hdp_flush(rdev); > radeon_ring_set_wptr(rdev, ring); > } > @@ -207,12 +209,14 @@ void radeon_ring_commit(struct radeon_device *rdev, struct radeon_ring *ring) > * > * @rdev: radeon_device pointer > * @ring: radeon_ring structure holding ring information > + * @hdp_flush: Whether or not to perform an HDP cache flush > * > * Call radeon_ring_commit() then unlock the ring (all asics). > */ > -void radeon_ring_unlock_commit(struct radeon_device *rdev, struct radeon_ring *ring) > +void radeon_ring_unlock_commit(struct radeon_device *rdev, struct radeon_ring *ring, > + bool hdp_flush) > { > - radeon_ring_commit(rdev, ring); > + radeon_ring_commit(rdev, ring, hdp_flush); > mutex_unlock(&rdev->ring_lock); > } > > @@ -372,7 +376,7 @@ int radeon_ring_restore(struct radeon_device *rdev, struct radeon_ring *ring, > radeon_ring_write(ring, data[i]); > } > > - radeon_ring_unlock_commit(rdev, ring); > + radeon_ring_unlock_commit(rdev, ring, false); > kfree(data); > return 0; > } > diff --git a/drivers/gpu/drm/radeon/radeon_semaphore.c b/drivers/gpu/drm/radeon/radeon_semaphore.c > index dbd6bcd..56d9fd6 100644 > --- a/drivers/gpu/drm/radeon/radeon_semaphore.c > +++ b/drivers/gpu/drm/radeon/radeon_semaphore.c > @@ -179,7 +179,7 @@ int radeon_semaphore_sync_rings(struct radeon_device *rdev, > continue; > } > > - radeon_ring_commit(rdev, &rdev->ring[i]); > + radeon_ring_commit(rdev, &rdev->ring[i], false); > radeon_fence_note_sync(fence, ring); > > semaphore->gpu_addr += 8; > diff --git a/drivers/gpu/drm/radeon/radeon_test.c b/drivers/gpu/drm/radeon/radeon_test.c > index 5adf420..17bc3dc 100644 > --- a/drivers/gpu/drm/radeon/radeon_test.c > +++ b/drivers/gpu/drm/radeon/radeon_test.c > @@ -288,7 +288,7 @@ static int radeon_test_create_and_emit_fence(struct radeon_device *rdev, > return r; > } > radeon_fence_emit(rdev, fence, ring->idx); > - radeon_ring_unlock_commit(rdev, ring); > + radeon_ring_unlock_commit(rdev, ring, false); > } > return 0; > } > @@ -313,7 +313,7 @@ void radeon_test_ring_sync(struct radeon_device *rdev, > goto out_cleanup; > } > radeon_semaphore_emit_wait(rdev, ringA->idx, semaphore); > - radeon_ring_unlock_commit(rdev, ringA); > + radeon_ring_unlock_commit(rdev, ringA, false); > > r = radeon_test_create_and_emit_fence(rdev, ringA, &fence1); > if (r) > @@ -325,7 +325,7 @@ void radeon_test_ring_sync(struct radeon_device *rdev, > goto out_cleanup; > } > radeon_semaphore_emit_wait(rdev, ringA->idx, semaphore); > - radeon_ring_unlock_commit(rdev, ringA); > + radeon_ring_unlock_commit(rdev, ringA, false); > > r = radeon_test_create_and_emit_fence(rdev, ringA, &fence2); > if (r) > @@ -344,7 +344,7 @@ void radeon_test_ring_sync(struct radeon_device *rdev, > goto out_cleanup; > } > radeon_semaphore_emit_signal(rdev, ringB->idx, semaphore); > - radeon_ring_unlock_commit(rdev, ringB); > + radeon_ring_unlock_commit(rdev, ringB, false); > > r = radeon_fence_wait(fence1, false); > if (r) { > @@ -365,7 +365,7 @@ void radeon_test_ring_sync(struct radeon_device *rdev, > goto out_cleanup; > } > radeon_semaphore_emit_signal(rdev, ringB->idx, semaphore); > - radeon_ring_unlock_commit(rdev, ringB); > + radeon_ring_unlock_commit(rdev, ringB, false); > > r = radeon_fence_wait(fence2, false); > if (r) { > @@ -408,7 +408,7 @@ static void radeon_test_ring_sync2(struct radeon_device *rdev, > goto out_cleanup; > } > radeon_semaphore_emit_wait(rdev, ringA->idx, semaphore); > - radeon_ring_unlock_commit(rdev, ringA); > + radeon_ring_unlock_commit(rdev, ringA, false); > > r = radeon_test_create_and_emit_fence(rdev, ringA, &fenceA); > if (r) > @@ -420,7 +420,7 @@ static void radeon_test_ring_sync2(struct radeon_device *rdev, > goto out_cleanup; > } > radeon_semaphore_emit_wait(rdev, ringB->idx, semaphore); > - radeon_ring_unlock_commit(rdev, ringB); > + radeon_ring_unlock_commit(rdev, ringB, false); > r = radeon_test_create_and_emit_fence(rdev, ringB, &fenceB); > if (r) > goto out_cleanup; > @@ -442,7 +442,7 @@ static void radeon_test_ring_sync2(struct radeon_device *rdev, > goto out_cleanup; > } > radeon_semaphore_emit_signal(rdev, ringC->idx, semaphore); > - radeon_ring_unlock_commit(rdev, ringC); > + radeon_ring_unlock_commit(rdev, ringC, false); > > for (i = 0; i < 30; ++i) { > mdelay(100); > @@ -468,7 +468,7 @@ static void radeon_test_ring_sync2(struct radeon_device *rdev, > goto out_cleanup; > } > radeon_semaphore_emit_signal(rdev, ringC->idx, semaphore); > - radeon_ring_unlock_commit(rdev, ringC); > + radeon_ring_unlock_commit(rdev, ringC, false); > > mdelay(1000); > > diff --git a/drivers/gpu/drm/radeon/radeon_uvd.c b/drivers/gpu/drm/radeon/radeon_uvd.c > index 6bf55ec..341848a 100644 > --- a/drivers/gpu/drm/radeon/radeon_uvd.c > +++ b/drivers/gpu/drm/radeon/radeon_uvd.c > @@ -646,7 +646,7 @@ static int radeon_uvd_send_msg(struct radeon_device *rdev, > ib.ptr[i] = PACKET2(0); > ib.length_dw = 16; > > - r = radeon_ib_schedule(rdev, &ib, NULL); > + r = radeon_ib_schedule(rdev, &ib, NULL, false); > if (r) > goto err; > ttm_eu_fence_buffer_objects(&ticket, &head, ib.fence); > diff --git a/drivers/gpu/drm/radeon/radeon_vce.c b/drivers/gpu/drm/radeon/radeon_vce.c > index f9b70a4..c7190aa 100644 > --- a/drivers/gpu/drm/radeon/radeon_vce.c > +++ b/drivers/gpu/drm/radeon/radeon_vce.c > @@ -368,7 +368,7 @@ int radeon_vce_get_create_msg(struct radeon_device *rdev, int ring, > for (i = ib.length_dw; i < ib_size_dw; ++i) > ib.ptr[i] = 0x0; > > - r = radeon_ib_schedule(rdev, &ib, NULL); > + r = radeon_ib_schedule(rdev, &ib, NULL, false); > if (r) { > DRM_ERROR("radeon: failed to schedule ib (%d).\n", r); > } > @@ -425,7 +425,7 @@ int radeon_vce_get_destroy_msg(struct radeon_device *rdev, int ring, > for (i = ib.length_dw; i < ib_size_dw; ++i) > ib.ptr[i] = 0x0; > > - r = radeon_ib_schedule(rdev, &ib, NULL); > + r = radeon_ib_schedule(rdev, &ib, NULL, false); > if (r) { > DRM_ERROR("radeon: failed to schedule ib (%d).\n", r); > } > @@ -715,7 +715,7 @@ int radeon_vce_ring_test(struct radeon_device *rdev, struct radeon_ring *ring) > return r; > } > radeon_ring_write(ring, VCE_CMD_END); > - radeon_ring_unlock_commit(rdev, ring); > + radeon_ring_unlock_commit(rdev, ring, false); > > for (i = 0; i < rdev->usec_timeout; i++) { > if (vce_v1_0_get_rptr(rdev, ring) != rptr) > diff --git a/drivers/gpu/drm/radeon/radeon_vm.c b/drivers/gpu/drm/radeon/radeon_vm.c > index 898cbb7..95da3fe 100644 > --- a/drivers/gpu/drm/radeon/radeon_vm.c > +++ b/drivers/gpu/drm/radeon/radeon_vm.c > @@ -422,7 +422,7 @@ static int radeon_vm_clear_bo(struct radeon_device *rdev, > radeon_asic_vm_pad_ib(rdev, &ib); > WARN_ON(ib.length_dw > 64); > > - r = radeon_ib_schedule(rdev, &ib, NULL); > + r = radeon_ib_schedule(rdev, &ib, NULL, false); > if (r) > goto error; > > @@ -695,7 +695,7 @@ int radeon_vm_update_page_directory(struct radeon_device *rdev, > radeon_semaphore_sync_to(ib.semaphore, pd->tbo.sync_obj); > radeon_semaphore_sync_to(ib.semaphore, vm->last_id_use); > WARN_ON(ib.length_dw > ndw); > - r = radeon_ib_schedule(rdev, &ib, NULL); > + r = radeon_ib_schedule(rdev, &ib, NULL, false); > if (r) { > radeon_ib_free(rdev, &ib); > return r; > @@ -959,7 +959,7 @@ int radeon_vm_bo_update(struct radeon_device *rdev, > WARN_ON(ib.length_dw > ndw); > > radeon_semaphore_sync_to(ib.semaphore, vm->fence); > - r = radeon_ib_schedule(rdev, &ib, NULL); > + r = radeon_ib_schedule(rdev, &ib, NULL, false); > if (r) { > radeon_ib_free(rdev, &ib); > return r; > diff --git a/drivers/gpu/drm/radeon/rv515.c b/drivers/gpu/drm/radeon/rv515.c > index 3e21e86..8a477bf 100644 > --- a/drivers/gpu/drm/radeon/rv515.c > +++ b/drivers/gpu/drm/radeon/rv515.c > @@ -124,7 +124,7 @@ void rv515_ring_start(struct radeon_device *rdev, struct radeon_ring *ring) > radeon_ring_write(ring, GEOMETRY_ROUND_NEAREST | COLOR_ROUND_NEAREST); > radeon_ring_write(ring, PACKET0(0x20C8, 0)); > radeon_ring_write(ring, 0); > - radeon_ring_unlock_commit(rdev, ring); > + radeon_ring_unlock_commit(rdev, ring, false); > } > > int rv515_mc_wait_for_idle(struct radeon_device *rdev) > diff --git a/drivers/gpu/drm/radeon/rv770_dma.c b/drivers/gpu/drm/radeon/rv770_dma.c > index bbf2e07..74426ac 100644 > --- a/drivers/gpu/drm/radeon/rv770_dma.c > +++ b/drivers/gpu/drm/radeon/rv770_dma.c > @@ -90,7 +90,7 @@ int rv770_copy_dma(struct radeon_device *rdev, > return r; > } > > - radeon_ring_unlock_commit(rdev, ring); > + radeon_ring_unlock_commit(rdev, ring, false); > radeon_semaphore_free(rdev, &sem, *fence); > > return r; > diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c > index 011779b..e18f579 100644 > --- a/drivers/gpu/drm/radeon/si.c > +++ b/drivers/gpu/drm/radeon/si.c > @@ -3541,7 +3541,7 @@ static int si_cp_start(struct radeon_device *rdev) > radeon_ring_write(ring, PACKET3_BASE_INDEX(CE_PARTITION_BASE)); > radeon_ring_write(ring, 0xc000); > radeon_ring_write(ring, 0xe000); > - radeon_ring_unlock_commit(rdev, ring); > + radeon_ring_unlock_commit(rdev, ring, false); > > si_cp_enable(rdev, true); > > @@ -3570,7 +3570,7 @@ static int si_cp_start(struct radeon_device *rdev) > radeon_ring_write(ring, 0x0000000e); /* VGT_VERTEX_REUSE_BLOCK_CNTL */ > radeon_ring_write(ring, 0x00000010); /* VGT_OUT_DEALLOC_CNTL */ > > - radeon_ring_unlock_commit(rdev, ring); > + radeon_ring_unlock_commit(rdev, ring, false); > > for (i = RADEON_RING_TYPE_GFX_INDEX; i <= CAYMAN_RING_TYPE_CP2_INDEX; ++i) { > ring = &rdev->ring[i]; > @@ -3580,7 +3580,7 @@ static int si_cp_start(struct radeon_device *rdev) > radeon_ring_write(ring, PACKET3_COMPUTE(PACKET3_CLEAR_STATE, 0)); > radeon_ring_write(ring, 0); > > - radeon_ring_unlock_commit(rdev, ring); > + radeon_ring_unlock_commit(rdev, ring, false); > } > > return 0; > diff --git a/drivers/gpu/drm/radeon/si_dma.c b/drivers/gpu/drm/radeon/si_dma.c > index 7165051..7c22baa 100644 > --- a/drivers/gpu/drm/radeon/si_dma.c > +++ b/drivers/gpu/drm/radeon/si_dma.c > @@ -275,7 +275,7 @@ int si_copy_dma(struct radeon_device *rdev, > return r; > } > > - radeon_ring_unlock_commit(rdev, ring); > + radeon_ring_unlock_commit(rdev, ring, false); > radeon_semaphore_free(rdev, &sem, *fence); > > return r; > diff --git a/drivers/gpu/drm/radeon/uvd_v1_0.c b/drivers/gpu/drm/radeon/uvd_v1_0.c > index be42c81..cda3913 100644 > --- a/drivers/gpu/drm/radeon/uvd_v1_0.c > +++ b/drivers/gpu/drm/radeon/uvd_v1_0.c > @@ -124,7 +124,7 @@ int uvd_v1_0_init(struct radeon_device *rdev) > radeon_ring_write(ring, PACKET0(UVD_SEMA_CNTL, 0)); > radeon_ring_write(ring, 3); > > - radeon_ring_unlock_commit(rdev, ring); > + radeon_ring_unlock_commit(rdev, ring, false); > > done: > /* lower clocks again */ > @@ -331,7 +331,7 @@ int uvd_v1_0_ring_test(struct radeon_device *rdev, struct radeon_ring *ring) > } > radeon_ring_write(ring, PACKET0(UVD_CONTEXT_ID, 0)); > radeon_ring_write(ring, 0xDEADBEEF); > - radeon_ring_unlock_commit(rdev, ring); > + radeon_ring_unlock_commit(rdev, ring, false); > for (i = 0; i < rdev->usec_timeout; i++) { > tmp = RREG32(UVD_CONTEXT_ID); > if (tmp == 0xDEADBEEF) > -- > 2.1.0 > > _______________________________________________ > dri-devel mailing list > dri-devel@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/dri-devel _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel