Message ID | 20230909223848.427849-4-alan.previn.teres.alexis@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/i915/pxp/mtl: Update gsc-heci cmd submission to align with fw/hw spec | expand |
On 9/9/2023 3:38 PM, Alan Previn wrote: > On Meteorlake onwards, HW specs require that all user contexts that > run on render or compute engines and require PXP must enforce > run-alone bit in lrc. Add this enforcement for protected contexts. > > Signed-off-by: Alan Previn <alan.previn.teres.alexis@intel.com> > --- > drivers/gpu/drm/i915/gt/intel_lrc.c | 23 +++++++++++++++++++++++ > 1 file changed, 23 insertions(+) > > diff --git a/drivers/gpu/drm/i915/gt/intel_lrc.c b/drivers/gpu/drm/i915/gt/intel_lrc.c > index 967fe4d77a87..3df32177e49e 100644 > --- a/drivers/gpu/drm/i915/gt/intel_lrc.c > +++ b/drivers/gpu/drm/i915/gt/intel_lrc.c > @@ -845,6 +845,27 @@ lrc_setup_indirect_ctx(u32 *regs, > lrc_ring_indirect_offset_default(engine) << 6; > } > > +static bool ctx_needs_runalone(const struct intel_context *ce) > +{ > + struct i915_gem_context *gem_ctx; > + bool ctx_is_protected = false; > + > + /* > + * On MTL and newer platforms, protected contexts require setting > + * the LRC run-alone bit or else the encryption will not happen. > + */ > + if (GRAPHICS_VER_FULL(ce->engine->i915) >= IP_VER(12, 70) && > + (ce->engine->class == COMPUTE_CLASS || ce->engine->class == RENDER_CLASS)) { > + rcu_read_lock(); > + gem_ctx = rcu_dereference(ce->gem_context); > + if (gem_ctx) > + ctx_is_protected = gem_ctx->uses_protected_content; > + rcu_read_unlock(); > + } > + > + return ctx_is_protected; > +} > + > static void init_common_regs(u32 * const regs, > const struct intel_context *ce, > const struct intel_engine_cs *engine, > @@ -860,6 +881,8 @@ static void init_common_regs(u32 * const regs, > if (GRAPHICS_VER(engine->i915) < 11) > ctl |= _MASKED_BIT_DISABLE(CTX_CTRL_ENGINE_CTX_SAVE_INHIBIT | > CTX_CTRL_RS_CTX_ENABLE); > + if (ctx_needs_runalone(ce)) > + ctl |= _MASKED_BIT_ENABLE(BIT(7)); > regs[CTX_CONTEXT_CONTROL] = ctl; > > regs[CTX_TIMESTAMP] = ce->stats.runtime.last; Can we please get the bit defined in intel_engine_regs.h with a define instead of a number identification? Review completed conditional to the above fix. Reviewed-by: Balasubrawmanian, Vivaik <vivaik.balasubrawmanian@intel.com> <mailto:vivaik.balasubrawmanian@intel.com>
On Sat, 2023-09-09 at 15:38 -0700, Teres Alexis, Alan Previn wrote: > On Meteorlake onwards, HW specs require that all user contexts that > run on render or compute engines and require PXP must enforce > run-alone bit in lrc. Add this enforcement for protected contexts. alan:snip > > Signed-off-by: Alan Previn <alan.previn.teres.alexis@intel.com> > @@ -860,6 +881,8 @@ static void init_common_regs(u32 * const regs, > if (GRAPHICS_VER(engine->i915) < 11) > ctl |= _MASKED_BIT_DISABLE(CTX_CTRL_ENGINE_CTX_SAVE_INHIBIT | > CTX_CTRL_RS_CTX_ENABLE); > + if (ctx_needs_runalone(ce)) > + ctl |= _MASKED_BIT_ENABLE(BIT(7)); > regs[CTX_CONTEXT_CONTROL] = ctl; > > regs[CTX_TIMESTAMP] = ce->stats.runtime.last; alan: to align intel-gfx ml, Vivaik reviewed this on dri-devel at https://lists.freedesktop.org/archives/dri-devel/2023-September/422875.html - snippet: thus, will rerev this (with the others fixes in this series). >> Can we please get the bit defined in intel_engine_regs.h with a define >> instead of a number identification? >> >> Review completed conditional to the above fix. >> >> Reviewed-by: Balasubrawmanian, Vivaik >> <vivaik.balasubrawmanian at intel.com> >> <mailto:vivaik.balasubrawmanian at intel.com>
diff --git a/drivers/gpu/drm/i915/gt/intel_lrc.c b/drivers/gpu/drm/i915/gt/intel_lrc.c index 967fe4d77a87..3df32177e49e 100644 --- a/drivers/gpu/drm/i915/gt/intel_lrc.c +++ b/drivers/gpu/drm/i915/gt/intel_lrc.c @@ -845,6 +845,27 @@ lrc_setup_indirect_ctx(u32 *regs, lrc_ring_indirect_offset_default(engine) << 6; } +static bool ctx_needs_runalone(const struct intel_context *ce) +{ + struct i915_gem_context *gem_ctx; + bool ctx_is_protected = false; + + /* + * On MTL and newer platforms, protected contexts require setting + * the LRC run-alone bit or else the encryption will not happen. + */ + if (GRAPHICS_VER_FULL(ce->engine->i915) >= IP_VER(12, 70) && + (ce->engine->class == COMPUTE_CLASS || ce->engine->class == RENDER_CLASS)) { + rcu_read_lock(); + gem_ctx = rcu_dereference(ce->gem_context); + if (gem_ctx) + ctx_is_protected = gem_ctx->uses_protected_content; + rcu_read_unlock(); + } + + return ctx_is_protected; +} + static void init_common_regs(u32 * const regs, const struct intel_context *ce, const struct intel_engine_cs *engine, @@ -860,6 +881,8 @@ static void init_common_regs(u32 * const regs, if (GRAPHICS_VER(engine->i915) < 11) ctl |= _MASKED_BIT_DISABLE(CTX_CTRL_ENGINE_CTX_SAVE_INHIBIT | CTX_CTRL_RS_CTX_ENABLE); + if (ctx_needs_runalone(ce)) + ctl |= _MASKED_BIT_ENABLE(BIT(7)); regs[CTX_CONTEXT_CONTROL] = ctl; regs[CTX_TIMESTAMP] = ce->stats.runtime.last;
On Meteorlake onwards, HW specs require that all user contexts that run on render or compute engines and require PXP must enforce run-alone bit in lrc. Add this enforcement for protected contexts. Signed-off-by: Alan Previn <alan.previn.teres.alexis@intel.com> --- drivers/gpu/drm/i915/gt/intel_lrc.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+)