drm/i915: Switch to use HWS indices rather than addresses
If we use the STORE_DATA_INDEX function we can use a fixed offset and avoid having to lookup up the engine HWS address. A step closer to being able to emit the final breadcrumb during request_add rather than later in the submission interrupt handler. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20190318095204.9913-9-chris@chris-wilson.co.uk
This commit is contained in:
@@ -43,12 +43,6 @@
|
||||
*/
|
||||
#define LEGACY_REQUEST_SIZE 200
|
||||
|
||||
static inline u32 hws_hangcheck_address(struct intel_engine_cs *engine)
|
||||
{
|
||||
return (i915_ggtt_offset(engine->status_page.vma) +
|
||||
I915_GEM_HWS_HANGCHECK_ADDR);
|
||||
}
|
||||
|
||||
unsigned int intel_ring_update_space(struct intel_ring *ring)
|
||||
{
|
||||
unsigned int space;
|
||||
@@ -317,8 +311,8 @@ static u32 *gen6_rcs_emit_breadcrumb(struct i915_request *rq, u32 *cs)
|
||||
*cs++ = rq->fence.seqno;
|
||||
|
||||
*cs++ = GFX_OP_PIPE_CONTROL(4);
|
||||
*cs++ = PIPE_CONTROL_QW_WRITE;
|
||||
*cs++ = hws_hangcheck_address(rq->engine) | PIPE_CONTROL_GLOBAL_GTT;
|
||||
*cs++ = PIPE_CONTROL_QW_WRITE | PIPE_CONTROL_STORE_DATA_INDEX;
|
||||
*cs++ = I915_GEM_HWS_HANGCHECK_ADDR | PIPE_CONTROL_GLOBAL_GTT;
|
||||
*cs++ = intel_engine_next_hangcheck_seqno(rq->engine);
|
||||
|
||||
*cs++ = MI_USER_INTERRUPT;
|
||||
@@ -423,8 +417,10 @@ static u32 *gen7_rcs_emit_breadcrumb(struct i915_request *rq, u32 *cs)
|
||||
*cs++ = rq->fence.seqno;
|
||||
|
||||
*cs++ = GFX_OP_PIPE_CONTROL(4);
|
||||
*cs++ = PIPE_CONTROL_QW_WRITE | PIPE_CONTROL_GLOBAL_GTT_IVB;
|
||||
*cs++ = hws_hangcheck_address(rq->engine);
|
||||
*cs++ = (PIPE_CONTROL_QW_WRITE |
|
||||
PIPE_CONTROL_STORE_DATA_INDEX |
|
||||
PIPE_CONTROL_GLOBAL_GTT_IVB);
|
||||
*cs++ = I915_GEM_HWS_HANGCHECK_ADDR;
|
||||
*cs++ = intel_engine_next_hangcheck_seqno(rq->engine);
|
||||
|
||||
*cs++ = MI_USER_INTERRUPT;
|
||||
|
Reference in New Issue
Block a user