static u32 guc_ctl_feature_flags(struct intel_guc *guc)
 {
+       struct intel_gt *gt = guc_to_gt(guc);
        u32 flags = 0;
 
+       /*
+        * Enable PXP GuC autoteardown flow.
+        * NB: MTL does things differently.
+        */
+       if (HAS_PXP(gt->i915) && !IS_METEORLAKE(gt->i915))
+               flags |= GUC_CTL_ENABLE_GUC_PXP_CTL;
+
        if (!intel_guc_submission_is_used(guc))
                flags |= GUC_CTL_DISABLE_SCHEDULER;
 
 
 #define   GUC_WA_ENABLE_TSC_CHECK_ON_RC6       BIT(22)
 
 #define GUC_CTL_FEATURE                        2
+#define   GUC_CTL_ENABLE_GUC_PXP_CTL   BIT(1)
 #define   GUC_CTL_ENABLE_SLPC          BIT(2)
 #define   GUC_CTL_DISABLE_SCHEDULER    BIT(14)
 
 
 
 #define HAS_RPS(i915)  (INTEL_INFO(i915)->has_rps)
 
+#define HAS_PXP(i915) \
+       (IS_ENABLED(CONFIG_DRM_I915_PXP) && INTEL_INFO(i915)->has_pxp)
+
 #define HAS_HECI_PXP(i915) \
        (INTEL_INFO(i915)->has_heci_pxp)
 
 
 
 static struct intel_gt *find_gt_for_required_protected_content(struct drm_i915_private *i915)
 {
-       if (!IS_ENABLED(CONFIG_DRM_I915_PXP) || !INTEL_INFO(i915)->has_pxp)
+       if (!HAS_PXP(i915))
                return NULL;
 
        /*