drm/i915/guc/slpc: Check GuC status before freq boost
authorVinay Belgaumkar <vinay.belgaumkar@intel.com>
Fri, 12 Nov 2021 07:10:16 +0000 (23:10 -0800)
committerJohn Harrison <John.C.Harrison@Intel.com>
Fri, 12 Nov 2021 18:19:48 +0000 (10:19 -0800)
It's possible that i915 might get wedged between a boost
and un-boost. Validate the i915-GuC connection before trying
to send a H2G to change the min frequency.

Bug: https://gitlab.freedesktop.org/drm/intel/-/issues/4464

Cc: Ashutosh Dixit <ashutosh.dixit@intel.com>
Signed-off-by: Vinay Belgaumkar <vinay.belgaumkar@intel.com>
Reviewed-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
Signed-off-by: John Harrison <John.C.Harrison@Intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20211112071016.9640-1-vinay.belgaumkar@intel.com
drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c

index 4e1d3cd291649275144312c4aa01b8d1a1d6bffb..22c1c12369f2ffcabe96e7a07e58b3a3c70d3b3c 100644 (file)
@@ -183,11 +183,15 @@ static int slpc_unset_param(struct intel_guc_slpc *slpc,
 static int slpc_force_min_freq(struct intel_guc_slpc *slpc, u32 freq)
 {
        struct drm_i915_private *i915 = slpc_to_i915(slpc);
+       struct intel_guc *guc = slpc_to_guc(slpc);
        intel_wakeref_t wakeref;
        int ret = 0;
 
        lockdep_assert_held(&slpc->lock);
 
+       if (!intel_guc_is_ready(guc))
+               return -ENODEV;
+
        /*
         * This function is a little different as compared to
         * intel_guc_slpc_set_min_freq(). Softlimit will not be updated