Message ID | 20221013161416.3684904-1-andrzej.hajda@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/1915/guc: enable engine reset on CAT | expand |
On 10/13/2022 09:14, Andrzej Hajda wrote: > In case of catastrophic errors GuC is able to initate engine > reset immediately, instead of waiting for timeout. > > Signed-off-by: Andrzej Hajda <andrzej.hajda@intel.com> > --- > Hi all, > > I am new in the subject, so please be polite if this is mistake. > Tests shows that it allows to save about 7 seconds on the machine > (Raptor Lake) in case of CAT. > I am not aware of scenario in which would be reasonable to keep > the engine in hung state. > On the other side I am not sure if there should not be constraints > on firmware version. Technically there is. The feature was added in GuC v67. At present the earliest supported firmware version is 69 so it won't actually cause a break (or at least, not a new break). However, there is a task in progress to re-add support for v62 because 62 is out in the wild. So this change should really be wrapped with: if (GET_UC_VER(guc) >= MAKE_UC_VER(67, 0, 0)) There is also a potential impact for SRIOV customers. If one KMD wants reset-on-fault but another KMD (e.g. Windows) does not, that would be a problem. Will need to discuss this with the Windows team. John. > > Regards > Andrzej > --- > drivers/gpu/drm/i915/gt/uc/intel_guc.c | 2 +- > drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h | 1 + > 2 files changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc.c b/drivers/gpu/drm/i915/gt/uc/intel_guc.c > index 27b09ba1d295fc..2adcdf13db1911 100644 > --- a/drivers/gpu/drm/i915/gt/uc/intel_guc.c > +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc.c > @@ -211,7 +211,7 @@ static u32 guc_ctl_debug_flags(struct intel_guc *guc) > > static u32 guc_ctl_feature_flags(struct intel_guc *guc) > { > - u32 flags = 0; > + u32 flags = GUC_CTL_ENABLE_ENGINE_RESET_ON_CAT; > > if (!intel_guc_submission_is_used(guc)) > flags |= GUC_CTL_DISABLE_SCHEDULER; > diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h b/drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h > index e7a7fb450f442a..96f3116e263cdf 100644 > --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h > +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h > @@ -109,6 +109,7 @@ > > #define GUC_CTL_FEATURE 2 > #define GUC_CTL_ENABLE_SLPC BIT(2) > +#define GUC_CTL_ENABLE_ENGINE_RESET_ON_CAT BIT(8) > #define GUC_CTL_DISABLE_SCHEDULER BIT(14) > > #define GUC_CTL_DEBUG 3
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc.c b/drivers/gpu/drm/i915/gt/uc/intel_guc.c index 27b09ba1d295fc..2adcdf13db1911 100644 --- a/drivers/gpu/drm/i915/gt/uc/intel_guc.c +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc.c @@ -211,7 +211,7 @@ static u32 guc_ctl_debug_flags(struct intel_guc *guc) static u32 guc_ctl_feature_flags(struct intel_guc *guc) { - u32 flags = 0; + u32 flags = GUC_CTL_ENABLE_ENGINE_RESET_ON_CAT; if (!intel_guc_submission_is_used(guc)) flags |= GUC_CTL_DISABLE_SCHEDULER; diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h b/drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h index e7a7fb450f442a..96f3116e263cdf 100644 --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h @@ -109,6 +109,7 @@ #define GUC_CTL_FEATURE 2 #define GUC_CTL_ENABLE_SLPC BIT(2) +#define GUC_CTL_ENABLE_ENGINE_RESET_ON_CAT BIT(8) #define GUC_CTL_DISABLE_SCHEDULER BIT(14) #define GUC_CTL_DEBUG 3
In case of catastrophic errors GuC is able to initate engine reset immediately, instead of waiting for timeout. Signed-off-by: Andrzej Hajda <andrzej.hajda@intel.com> --- Hi all, I am new in the subject, so please be polite if this is mistake. Tests shows that it allows to save about 7 seconds on the machine (Raptor Lake) in case of CAT. I am not aware of scenario in which would be reasonable to keep the engine in hung state. On the other side I am not sure if there should not be constraints on firmware version. Regards Andrzej --- drivers/gpu/drm/i915/gt/uc/intel_guc.c | 2 +- drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-)