diff options
author | Tvrtko Ursulin <tvrtko.ursulin@intel.com> | 2018-03-02 11:14:56 -0500 |
---|---|---|
committer | Mika Kuoppala <mika.kuoppala@linux.intel.com> | 2018-03-05 09:26:28 -0500 |
commit | d4ccceb055912c2e5e15ec488cee3378ee4ca73c (patch) | |
tree | 44f1fd4623ee2683ac298ae1356e39689fc14215 | |
parent | 7509702bd8bd0975cc42a7272221446a897be950 (diff) |
drm/i915/icl: Ringbuffer interrupt handling
On Gen11 interrupt masks need to be clear to allow C6 entry.
We keep them all enabled knowing that we generate extra
interrupts.
v2: Rebase.
v3: Remove gen 11 extra check in logical_render_ring_init.
v4: Rebase fixes.
v5: Rebase/refactor.
v6: Rebase.
v7: Rebase.
v8: Update comment and commit message (Daniele)
Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Reviewed-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Signed-off-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180302161501.28594-1-mika.kuoppala@linux.intel.com
-rw-r--r-- | drivers/gpu/drm/i915/intel_breadcrumbs.c | 16 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_lrc.c | 13 |
2 files changed, 21 insertions, 8 deletions
diff --git a/drivers/gpu/drm/i915/intel_breadcrumbs.c b/drivers/gpu/drm/i915/intel_breadcrumbs.c index a83690642aab..094f010908b8 100644 --- a/drivers/gpu/drm/i915/intel_breadcrumbs.c +++ b/drivers/gpu/drm/i915/intel_breadcrumbs.c | |||
@@ -168,17 +168,21 @@ static void irq_enable(struct intel_engine_cs *engine) | |||
168 | set_bit(ENGINE_IRQ_BREADCRUMB, &engine->irq_posted); | 168 | set_bit(ENGINE_IRQ_BREADCRUMB, &engine->irq_posted); |
169 | 169 | ||
170 | /* Caller disables interrupts */ | 170 | /* Caller disables interrupts */ |
171 | spin_lock(&engine->i915->irq_lock); | 171 | if (engine->irq_enable) { |
172 | engine->irq_enable(engine); | 172 | spin_lock(&engine->i915->irq_lock); |
173 | spin_unlock(&engine->i915->irq_lock); | 173 | engine->irq_enable(engine); |
174 | spin_unlock(&engine->i915->irq_lock); | ||
175 | } | ||
174 | } | 176 | } |
175 | 177 | ||
176 | static void irq_disable(struct intel_engine_cs *engine) | 178 | static void irq_disable(struct intel_engine_cs *engine) |
177 | { | 179 | { |
178 | /* Caller disables interrupts */ | 180 | /* Caller disables interrupts */ |
179 | spin_lock(&engine->i915->irq_lock); | 181 | if (engine->irq_disable) { |
180 | engine->irq_disable(engine); | 182 | spin_lock(&engine->i915->irq_lock); |
181 | spin_unlock(&engine->i915->irq_lock); | 183 | engine->irq_disable(engine); |
184 | spin_unlock(&engine->i915->irq_lock); | ||
185 | } | ||
182 | } | 186 | } |
183 | 187 | ||
184 | void __intel_engine_disarm_breadcrumbs(struct intel_engine_cs *engine) | 188 | void __intel_engine_disarm_breadcrumbs(struct intel_engine_cs *engine) |
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c index 36b376e4b105..75d2daa4f6c1 100644 --- a/drivers/gpu/drm/i915/intel_lrc.c +++ b/drivers/gpu/drm/i915/intel_lrc.c | |||
@@ -2037,8 +2037,17 @@ logical_ring_default_vfuncs(struct intel_engine_cs *engine) | |||
2037 | 2037 | ||
2038 | engine->set_default_submission = execlists_set_default_submission; | 2038 | engine->set_default_submission = execlists_set_default_submission; |
2039 | 2039 | ||
2040 | engine->irq_enable = gen8_logical_ring_enable_irq; | 2040 | if (INTEL_GEN(engine->i915) < 11) { |
2041 | engine->irq_disable = gen8_logical_ring_disable_irq; | 2041 | engine->irq_enable = gen8_logical_ring_enable_irq; |
2042 | engine->irq_disable = gen8_logical_ring_disable_irq; | ||
2043 | } else { | ||
2044 | /* | ||
2045 | * TODO: On Gen11 interrupt masks need to be clear | ||
2046 | * to allow C6 entry. Keep interrupts enabled at | ||
2047 | * and take the hit of generating extra interrupts | ||
2048 | * until a more refined solution exists. | ||
2049 | */ | ||
2050 | } | ||
2042 | engine->emit_bb_start = gen8_emit_bb_start; | 2051 | engine->emit_bb_start = gen8_emit_bb_start; |
2043 | } | 2052 | } |
2044 | 2053 | ||