@ -1348,6 +1348,8 @@ static int i9xx_emit_breadcrumb(struct drm_i915_gem_request *req)
return 0 ;
}
static const int i9xx_emit_breadcrumb_sz = 4 ;
/**
* gen6_sema_emit_breadcrumb - Update the semaphore mailbox registers
*
@ -1401,6 +1403,8 @@ static int gen8_render_emit_breadcrumb(struct drm_i915_gem_request *req)
return 0 ;
}
static const int gen8_render_emit_breadcrumb_sz = 8 ;
/**
* intel_ring_sync - sync the waiter to the signaller on seqno
*
@ -2638,8 +2642,21 @@ static void intel_ring_default_vfuncs(struct drm_i915_private *dev_priv,
engine - > reset_hw = reset_ring_common ;
engine - > emit_breadcrumb = i9xx_emit_breadcrumb ;
if ( i915 . semaphores )
engine - > emit_breadcrumb_sz = i9xx_emit_breadcrumb_sz ;
if ( i915 . semaphores ) {
int num_rings ;
engine - > emit_breadcrumb = gen6_sema_emit_breadcrumb ;
num_rings = hweight32 ( INTEL_INFO ( dev_priv ) - > ring_mask ) - 1 ;
if ( INTEL_GEN ( dev_priv ) > = 8 ) {
engine - > emit_breadcrumb_sz + = num_rings * 6 ;
} else {
engine - > emit_breadcrumb_sz + = num_rings * 3 ;
if ( num_rings & 1 )
engine - > emit_breadcrumb_sz + + ;
}
}
engine - > submit_request = i9xx_submit_request ;
if ( INTEL_GEN ( dev_priv ) > = 8 )
@ -2667,9 +2684,17 @@ int intel_init_render_ring_buffer(struct intel_engine_cs *engine)
if ( INTEL_GEN ( dev_priv ) > = 8 ) {
engine - > init_context = intel_rcs_ctx_init ;
engine - > emit_breadcrumb = gen8_render_emit_breadcrumb ;
engine - > emit_breadcrumb_sz = gen8_render_emit_breadcrumb_sz ;
engine - > emit_flush = gen8_render_ring_flush ;
if ( i915 . semaphores )
if ( i915 . semaphores ) {
int num_rings ;
engine - > semaphore . signal = gen8_rcs_signal ;
num_rings =
hweight32 ( INTEL_INFO ( dev_priv ) - > ring_mask ) - 1 ;
engine - > emit_breadcrumb_sz + = num_rings * 6 ;
}
} else if ( INTEL_GEN ( dev_priv ) > = 6 ) {
engine - > init_context = intel_rcs_ctx_init ;
engine - > emit_flush = gen7_render_ring_flush ;