From 0a2ab1a9003f132195fe70c145a78b4079a3fb7f Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Mon, 5 Nov 2007 03:53:46 +1100 Subject: nouveau: cleanups --- linux-core/nouveau_buffer.c | 8 +++----- linux-core/nouveau_fence.c | 17 ++++++++++++----- 2 files changed, 15 insertions(+), 10 deletions(-) (limited to 'linux-core') diff --git a/linux-core/nouveau_buffer.c b/linux-core/nouveau_buffer.c index 82093468..7683defb 100644 --- a/linux-core/nouveau_buffer.c +++ b/linux-core/nouveau_buffer.c @@ -55,7 +55,6 @@ nouveau_bo_fence_type(struct drm_buffer_object *bo, uint32_t *fclass, uint32_t *type) { *fclass = 0; - if (bo->mem.mask & (DRM_BO_FLAG_READ | DRM_BO_FLAG_WRITE)) *type = 3; else @@ -167,7 +166,7 @@ nouveau_bo_move_m2mf(struct drm_buffer_object *bo, int evict, int no_wait, dchan->m2mf_dma_destin = dsth; BEGIN_RING(NvSubM2MF, - NV_MEMORY_TO_MEMORY_FORMAT_SET_DMA_SOURCE, 2); + NV_MEMORY_TO_MEMORY_FORMAT_SET_DMA_SOURCE, 2); OUT_RING (dchan->m2mf_dma_source); OUT_RING (dchan->m2mf_dma_destin); } @@ -191,9 +190,8 @@ nouveau_bo_move_m2mf(struct drm_buffer_object *bo, int evict, int no_wait, page_count -= line_count; } - return drm_bo_move_accel_cleanup(bo, evict, no_wait, 0, - DRM_FENCE_TYPE_EXE, - 0, new_mem); + return drm_bo_move_accel_cleanup(bo, evict, no_wait, dchan->chan->id, + DRM_FENCE_TYPE_EXE, 0, new_mem); } static int diff --git a/linux-core/nouveau_fence.c b/linux-core/nouveau_fence.c index e510aec7..f0e62861 100644 --- a/linux-core/nouveau_fence.c +++ b/linux-core/nouveau_fence.c @@ -54,13 +54,17 @@ nouveau_fence_emit(struct drm_device *dev, uint32_t class, uint32_t flags, DRM_DEBUG("class=%d, flags=0x%08x\n", class, flags); - /* We can't emit fences on client channels */ - if (chan != dchan->chan) - return 0; - - *breadcrumb = ++dchan->next_sequence; + /* We can't emit fences on client channels, update sequence number + * and userspace will emit the fence + */ + *breadcrumb = ++chan->next_sequence; *native_type = DRM_FENCE_TYPE_EXE; + if (chan != dchan->chan) { + DRM_DEBUG("user fence 0x%08x\n", *breadcrumb); + return 0; + } + DRM_DEBUG("emit 0x%08x\n", *breadcrumb); BEGIN_RING(NvSubM2MF, NV_MEMORY_TO_MEMORY_FORMAT_SET_REF, 1); OUT_RING (*breadcrumb); BEGIN_RING(NvSubM2MF, NV_MEMORY_TO_MEMORY_FORMAT_NOTIFY, 1); @@ -83,10 +87,13 @@ nouveau_fence_perform_flush(struct drm_device *dev, uint32_t class) pending_types = fc->pending_flush | ((fc->pending_exe_flush) ? DRM_FENCE_TYPE_EXE : 0); + DRM_DEBUG("pending: 0x%08x 0x%08x\n", pending_types, + fc->pending_flush); if (pending_types) { uint32_t sequence = NV_READ(NV03_FIFO_REGS(class) + 0x48); + DRM_DEBUG("got 0x%08x\n", sequence); drm_fence_handler(dev, class, sequence, pending_types, 0); } } -- cgit v1.2.3