diff options
Diffstat (limited to 'linux-core')
| -rw-r--r-- | linux-core/nouveau_buffer.c | 8 | ||||
| -rw-r--r-- | linux-core/nouveau_fence.c | 17 | 
2 files changed, 15 insertions, 10 deletions
| 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);  	}  } | 
