Skip to content

Commit 019bf27

Browse files
committed
drm/i915: Pull out some more common engine init code
Created two common helpers for engine setup and engine init phases respectively to help with code sharing. Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/1468422221-12132-1-git-send-email-tvrtko.ursulin@linux.intel.com Reviewed-by: Chris Wilson <chris-wilson.co.uk>
1 parent 88d2ba2 commit 019bf27

File tree

4 files changed

+56
-29
lines changed

4 files changed

+56
-29
lines changed

drivers/gpu/drm/i915/intel_engine_cs.c

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,3 +160,50 @@ int intel_engines_init(struct drm_device *dev)
160160
return ret;
161161
}
162162

163+
void intel_engine_init_hangcheck(struct intel_engine_cs *engine)
164+
{
165+
memset(&engine->hangcheck, 0, sizeof(engine->hangcheck));
166+
}
167+
168+
/**
169+
* intel_engines_setup_common - setup engine state not requiring hw access
170+
* @engine: Engine to setup.
171+
*
172+
* Initializes @engine@ structure members shared between legacy and execlists
173+
* submission modes which do not require hardware access.
174+
*
175+
* Typically done early in the submission mode specific engine setup stage.
176+
*/
177+
void intel_engine_setup_common(struct intel_engine_cs *engine)
178+
{
179+
INIT_LIST_HEAD(&engine->active_list);
180+
INIT_LIST_HEAD(&engine->request_list);
181+
INIT_LIST_HEAD(&engine->buffers);
182+
INIT_LIST_HEAD(&engine->execlist_queue);
183+
spin_lock_init(&engine->execlist_lock);
184+
185+
intel_engine_init_hangcheck(engine);
186+
i915_gem_batch_pool_init(&engine->i915->drm, &engine->batch_pool);
187+
}
188+
189+
/**
190+
* intel_engines_init_common - initialize cengine state which might require hw access
191+
* @engine: Engine to initialize.
192+
*
193+
* Initializes @engine@ structure members shared between legacy and execlists
194+
* submission modes which do require hardware access.
195+
*
196+
* Typcally done at later stages of submission mode specific engine setup.
197+
*
198+
* Returns zero on success or an error code on failure.
199+
*/
200+
int intel_engine_init_common(struct intel_engine_cs *engine)
201+
{
202+
int ret;
203+
204+
ret = intel_engine_init_breadcrumbs(engine);
205+
if (ret)
206+
return ret;
207+
208+
return i915_cmd_parser_init_ring(engine);
209+
}

drivers/gpu/drm/i915/intel_lrc.c

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2009,6 +2009,8 @@ logical_ring_setup(struct intel_engine_cs *engine)
20092009
struct drm_i915_private *dev_priv = engine->i915;
20102010
enum forcewake_domains fw_domains;
20112011

2012+
intel_engine_setup_common(engine);
2013+
20122014
/* Intentionally left blank. */
20132015
engine->buffer = NULL;
20142016

@@ -2026,21 +2028,12 @@ logical_ring_setup(struct intel_engine_cs *engine)
20262028

20272029
engine->fw_domains = fw_domains;
20282030

2029-
INIT_LIST_HEAD(&engine->active_list);
2030-
INIT_LIST_HEAD(&engine->request_list);
2031-
INIT_LIST_HEAD(&engine->buffers);
2032-
INIT_LIST_HEAD(&engine->execlist_queue);
2033-
spin_lock_init(&engine->execlist_lock);
2034-
20352031
tasklet_init(&engine->irq_tasklet,
20362032
intel_lrc_irq_handler, (unsigned long)engine);
20372033

20382034
logical_ring_init_platform_invariants(engine);
20392035
logical_ring_default_vfuncs(engine);
20402036
logical_ring_default_irqs(engine);
2041-
2042-
intel_engine_init_hangcheck(engine);
2043-
i915_gem_batch_pool_init(&dev_priv->drm, &engine->batch_pool);
20442037
}
20452038

20462039
static int
@@ -2049,11 +2042,7 @@ logical_ring_init(struct intel_engine_cs *engine)
20492042
struct i915_gem_context *dctx = engine->i915->kernel_context;
20502043
int ret;
20512044

2052-
ret = intel_engine_init_breadcrumbs(engine);
2053-
if (ret)
2054-
goto error;
2055-
2056-
ret = i915_cmd_parser_init_ring(engine);
2045+
ret = intel_engine_init_common(engine);
20572046
if (ret)
20582047
goto error;
20592048

drivers/gpu/drm/i915/intel_ringbuffer.c

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -549,11 +549,6 @@ static bool stop_ring(struct intel_engine_cs *engine)
549549
return (I915_READ_HEAD(engine) & HEAD_ADDR) == 0;
550550
}
551551

552-
void intel_engine_init_hangcheck(struct intel_engine_cs *engine)
553-
{
554-
memset(&engine->hangcheck, 0, sizeof(engine->hangcheck));
555-
}
556-
557552
static int init_ring_common(struct intel_engine_cs *engine)
558553
{
559554
struct drm_i915_private *dev_priv = engine->i915;
@@ -2176,15 +2171,12 @@ static int intel_init_ring_buffer(struct intel_engine_cs *engine)
21762171

21772172
WARN_ON(engine->buffer);
21782173

2179-
INIT_LIST_HEAD(&engine->active_list);
2180-
INIT_LIST_HEAD(&engine->request_list);
2181-
INIT_LIST_HEAD(&engine->execlist_queue);
2182-
INIT_LIST_HEAD(&engine->buffers);
2183-
i915_gem_batch_pool_init(&dev_priv->drm, &engine->batch_pool);
2174+
intel_engine_setup_common(engine);
2175+
21842176
memset(engine->semaphore.sync_seqno, 0,
21852177
sizeof(engine->semaphore.sync_seqno));
21862178

2187-
ret = intel_engine_init_breadcrumbs(engine);
2179+
ret = intel_engine_init_common(engine);
21882180
if (ret)
21892181
goto error;
21902182

@@ -2225,10 +2217,6 @@ static int intel_init_ring_buffer(struct intel_engine_cs *engine)
22252217
goto error;
22262218
}
22272219

2228-
ret = i915_cmd_parser_init_ring(engine);
2229-
if (ret)
2230-
goto error;
2231-
22322220
return 0;
22332221

22342222
error:

drivers/gpu/drm/i915/intel_ringbuffer.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -480,6 +480,9 @@ int intel_ring_invalidate_all_caches(struct drm_i915_gem_request *req);
480480
int intel_init_pipe_control(struct intel_engine_cs *engine, int size);
481481
void intel_fini_pipe_control(struct intel_engine_cs *engine);
482482

483+
void intel_engine_setup_common(struct intel_engine_cs *engine);
484+
int intel_engine_init_common(struct intel_engine_cs *engine);
485+
483486
int intel_init_render_ring_buffer(struct intel_engine_cs *engine);
484487
int intel_init_bsd_ring_buffer(struct intel_engine_cs *engine);
485488
int intel_init_bsd2_ring_buffer(struct intel_engine_cs *engine);

0 commit comments

Comments
 (0)