u16 guc_id,
                                                 u32 preemption_timeout)
  {
 -      struct context_policy policy;
 +      if (guc->fw.major_ver_found >= 70) {
 +              struct context_policy policy;
  
 -      __guc_context_policy_start_klv(&policy, guc_id);
 -      __guc_context_policy_add_preemption_timeout(&policy, preemption_timeout);
 -      __guc_context_set_context_policies(guc, &policy, true);
 +              __guc_context_policy_start_klv(&policy, guc_id);
 +              __guc_context_policy_add_preemption_timeout(&policy, preemption_timeout);
 +              __guc_context_set_context_policies(guc, &policy, true);
 +      } else {
 +              u32 action[] = {
 +                      INTEL_GUC_ACTION_V69_SET_CONTEXT_PREEMPTION_TIMEOUT,
 +                      guc_id,
 +                      preemption_timeout
 +              };
 +
 +              intel_guc_send_busy_loop(guc, action, ARRAY_SIZE(action), 0, true);
 +      }
  }
  
- static void guc_context_ban(struct intel_context *ce, struct i915_request *rq)
+ static void
+ guc_context_revoke(struct intel_context *ce, struct i915_request *rq,
+                  unsigned int preempt_timeout_ms)
  {
        struct intel_guc *guc = ce_to_guc(ce);
        struct intel_runtime_pm *runtime_pm =
 
        uc_fw->minor_ver_found = FIELD_GET(CSS_SW_VERSION_UC_MINOR,
                                           css->sw_version);
  
 -      err = request_firmware(&fw, uc_fw->path, dev);
+       if (uc_fw->type == INTEL_UC_FW_TYPE_GUC)
+               uc_fw->private_data_size = css->private_data_size;
+ 
+       return 0;
+ }
+ 
+ /**
+  * intel_uc_fw_fetch - fetch uC firmware
+  * @uc_fw: uC firmware
+  *
+  * Fetch uC firmware into GEM obj.
+  *
+  * Return: 0 on success, a negative errno code on failure.
+  */
+ int intel_uc_fw_fetch(struct intel_uc_fw *uc_fw)
+ {
+       struct drm_i915_private *i915 = __uc_fw_to_gt(uc_fw)->i915;
+       struct device *dev = i915->drm.dev;
+       struct drm_i915_gem_object *obj;
+       const struct firmware *fw = NULL;
+       int err;
+ 
+       GEM_BUG_ON(!i915->wopcm.size);
+       GEM_BUG_ON(!intel_uc_fw_is_enabled(uc_fw));
+ 
+       err = i915_inject_probe_error(i915, -ENXIO);
+       if (err)
+               goto fail;
+ 
+       __force_fw_fetch_failures(uc_fw, -EINVAL);
+       __force_fw_fetch_failures(uc_fw, -ESTALE);
+ 
++      err = firmware_request_nowarn(&fw, uc_fw->path, dev);
++      if (err && !intel_uc_fw_is_overridden(uc_fw) && uc_fw->fallback.path) {
++              err = firmware_request_nowarn(&fw, uc_fw->fallback.path, dev);
++              if (!err) {
++                      drm_notice(&i915->drm,
++                                 "%s firmware %s is recommended, but only %s was found\n",
++                                 intel_uc_fw_type_repr(uc_fw->type),
++                                 uc_fw->wanted_path,
++                                 uc_fw->fallback.path);
++                      drm_info(&i915->drm,
++                               "Consider updating your linux-firmware pkg or downloading from %s\n",
++                               INTEL_UC_FIRMWARE_URL);
++
++                      uc_fw->path = uc_fw->fallback.path;
++                      uc_fw->major_ver_wanted = uc_fw->fallback.major_ver;
++                      uc_fw->minor_ver_wanted = uc_fw->fallback.minor_ver;
++              }
++      }
+       if (err)
+               goto fail;
+ 
+       if (uc_fw->loaded_via_gsc)
+               err = check_gsc_manifest(fw, uc_fw);
+       else
+               err = check_ccs_header(i915, fw, uc_fw);
+       if (err)
+               goto fail;
+ 
        if (uc_fw->major_ver_found != uc_fw->major_ver_wanted ||
            uc_fw->minor_ver_found < uc_fw->minor_ver_wanted) {
                drm_notice(&i915->drm, "%s firmware %s: unexpected version: %u.%u != %u.%u\n",