Skip to content

Commit a562772

Browse files
committed
drm/i915: Inline engine->init_context into its caller
We only use the init_context vfunc once while recording the default context state, and we use the same sequence in each backend (eliding steps that do not apply). Remove the vfunc for simplicity and de-duplication. Signed-off-by: Chris Wilson <[email protected]> Reviewed-by: Tvrtko Ursulin <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent 1032a2a commit a562772

File tree

7 files changed

+25
-46
lines changed

7 files changed

+25
-46
lines changed

drivers/gpu/drm/i915/gt/intel_engine_types.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -383,7 +383,6 @@ struct intel_engine_cs {
383383
const struct intel_context_ops *cops;
384384

385385
int (*request_alloc)(struct i915_request *rq);
386-
int (*init_context)(struct i915_request *rq);
387386

388387
int (*emit_flush)(struct i915_request *request, u32 mode);
389388
#define EMIT_INVALIDATE BIT(0)

drivers/gpu/drm/i915/gt/intel_lrc.c

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,6 @@
141141
#include "intel_gt.h"
142142
#include "intel_lrc_reg.h"
143143
#include "intel_mocs.h"
144-
#include "intel_renderstate.h"
145144
#include "intel_reset.h"
146145
#include "intel_workarounds.h"
147146

@@ -2727,25 +2726,6 @@ static u32 *gen8_emit_fini_breadcrumb_rcs(struct i915_request *request, u32 *cs)
27272726
return gen8_emit_wa_tail(request, cs);
27282727
}
27292728

2730-
static int gen8_init_rcs_context(struct i915_request *rq)
2731-
{
2732-
int ret;
2733-
2734-
ret = intel_engine_emit_ctx_wa(rq);
2735-
if (ret)
2736-
return ret;
2737-
2738-
ret = intel_rcs_context_init_mocs(rq);
2739-
/*
2740-
* Failing to program the MOCS is non-fatal.The system will not
2741-
* run at peak performance. So generate an error and carry on.
2742-
*/
2743-
if (ret)
2744-
DRM_ERROR("MOCS failed to program: expect performance issues.\n");
2745-
2746-
return intel_renderstate_emit(rq);
2747-
}
2748-
27492729
static void execlists_park(struct intel_engine_cs *engine)
27502730
{
27512731
del_timer_sync(&engine->execlists.timer);
@@ -2853,7 +2833,6 @@ int intel_execlists_submission_setup(struct intel_engine_cs *engine)
28532833
logical_ring_default_irqs(engine);
28542834

28552835
if (engine->class == RENDER_CLASS) {
2856-
engine->init_context = gen8_init_rcs_context;
28572836
engine->emit_flush = gen8_emit_flush_render;
28582837
engine->emit_fini_breadcrumb = gen8_emit_fini_breadcrumb_rcs;
28592838
}

drivers/gpu/drm/i915/gt/intel_mocs.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -568,11 +568,14 @@ void intel_mocs_init_l3cc_table(struct intel_gt *gt)
568568
*
569569
* Return: 0 on success, otherwise the error status.
570570
*/
571-
int intel_rcs_context_init_mocs(struct i915_request *rq)
571+
int intel_mocs_emit(struct i915_request *rq)
572572
{
573573
struct drm_i915_mocs_table t;
574574
int ret;
575575

576+
if (rq->engine->class != RENDER_CLASS)
577+
return 0;
578+
576579
if (get_mocs_settings(rq->engine->gt, &t)) {
577580
/* Program the RCS control registers */
578581
ret = emit_mocs_control_table(rq, &t);

drivers/gpu/drm/i915/gt/intel_mocs.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,9 @@ struct i915_request;
5454
struct intel_engine_cs;
5555
struct intel_gt;
5656

57-
int intel_rcs_context_init_mocs(struct i915_request *rq);
5857
void intel_mocs_init_l3cc_table(struct intel_gt *gt);
5958
void intel_mocs_init_engine(struct intel_engine_cs *engine);
6059

60+
int intel_mocs_emit(struct i915_request *rq);
61+
6162
#endif

drivers/gpu/drm/i915/gt/intel_renderstate.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ struct intel_renderstate {
4141
static const struct intel_renderstate_rodata *
4242
render_state_get_rodata(const struct intel_engine_cs *engine)
4343
{
44-
if (engine->id != RCS0)
44+
if (engine->class != RENDER_CLASS)
4545
return NULL;
4646

4747
switch (INTEL_GEN(engine->i915)) {

drivers/gpu/drm/i915/gt/intel_ringbuffer.c

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
#include "i915_trace.h"
3838
#include "intel_context.h"
3939
#include "intel_gt.h"
40-
#include "intel_renderstate.h"
4140
#include "intel_reset.h"
4241
#include "intel_workarounds.h"
4342

@@ -849,21 +848,6 @@ static void reset_finish(struct intel_engine_cs *engine)
849848
{
850849
}
851850

852-
static int intel_rcs_ctx_init(struct i915_request *rq)
853-
{
854-
int ret;
855-
856-
ret = intel_engine_emit_ctx_wa(rq);
857-
if (ret != 0)
858-
return ret;
859-
860-
ret = intel_renderstate_emit(rq);
861-
if (ret)
862-
return ret;
863-
864-
return 0;
865-
}
866-
867851
static int rcs_resume(struct intel_engine_cs *engine)
868852
{
869853
struct drm_i915_private *dev_priv = engine->i915;
@@ -2227,11 +2211,9 @@ static void setup_rcs(struct intel_engine_cs *engine)
22272211
engine->irq_enable_mask = GT_RENDER_USER_INTERRUPT;
22282212

22292213
if (INTEL_GEN(i915) >= 7) {
2230-
engine->init_context = intel_rcs_ctx_init;
22312214
engine->emit_flush = gen7_render_ring_flush;
22322215
engine->emit_fini_breadcrumb = gen7_rcs_emit_breadcrumb;
22332216
} else if (IS_GEN(i915, 6)) {
2234-
engine->init_context = intel_rcs_ctx_init;
22352217
engine->emit_flush = gen6_render_ring_flush;
22362218
engine->emit_fini_breadcrumb = gen6_rcs_emit_breadcrumb;
22372219
} else if (IS_GEN(i915, 5)) {

drivers/gpu/drm/i915/i915_gem.c

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
#include "gt/intel_gt_pm.h"
5151
#include "gt/intel_mocs.h"
5252
#include "gt/intel_reset.h"
53+
#include "gt/intel_renderstate.h"
5354
#include "gt/intel_workarounds.h"
5455

5556
#include "i915_drv.h"
@@ -1294,10 +1295,24 @@ static int __intel_engines_record_defaults(struct drm_i915_private *i915)
12941295
goto err_active;
12951296
}
12961297

1297-
err = 0;
1298-
if (rq->engine->init_context)
1299-
err = rq->engine->init_context(rq);
1298+
err = intel_engine_emit_ctx_wa(rq);
1299+
if (err)
1300+
goto err_rq;
1301+
1302+
/*
1303+
* Failing to program the MOCS is non-fatal.The system will not
1304+
* run at peak performance. So warn the user and carry on.
1305+
*/
1306+
err = intel_mocs_emit(rq);
1307+
if (err)
1308+
dev_notice(i915->drm.dev,
1309+
"Failed to program MOCS registers; expect performance issues.\n");
1310+
1311+
err = intel_renderstate_emit(rq);
1312+
if (err)
1313+
goto err_rq;
13001314

1315+
err_rq:
13011316
i915_request_add(rq);
13021317
if (err)
13031318
goto err_active;

0 commit comments

Comments
 (0)