drm/i915: Do not attempt to load the GSC multiple times
authorjsg <jsg@openbsd.org>
Thu, 12 Sep 2024 23:26:26 +0000 (23:26 +0000)
committerjsg <jsg@openbsd.org>
Thu, 12 Sep 2024 23:26:26 +0000 (23:26 +0000)
From Daniele Ceraolo Spurio
337266ada863a4232c9f8634deedc298a145521c in linux-6.6.y/6.6.51
59d3cfdd7f9655a0400ac453bf92199204f8b2a1 in mainline linux

sys/dev/pci/drm/i915/gt/uc/intel_gsc_uc.c
sys/dev/pci/drm/i915/gt/uc/intel_uc_fw.h

index 0d3b22a..e251e06 100644 (file)
@@ -304,7 +304,7 @@ void intel_gsc_uc_load_start(struct intel_gsc_uc *gsc)
 {
        struct intel_gt *gt = gsc_uc_to_gt(gsc);
 
-       if (!intel_uc_fw_is_loadable(&gsc->fw))
+       if (!intel_uc_fw_is_loadable(&gsc->fw) || intel_uc_fw_is_in_error(&gsc->fw))
                return;
 
        if (intel_gsc_uc_fw_init_done(gsc))
index 9a43172..ac7b3aa 100644 (file)
@@ -258,6 +258,11 @@ static inline bool intel_uc_fw_is_running(struct intel_uc_fw *uc_fw)
        return __intel_uc_fw_status(uc_fw) == INTEL_UC_FIRMWARE_RUNNING;
 }
 
+static inline bool intel_uc_fw_is_in_error(struct intel_uc_fw *uc_fw)
+{
+       return intel_uc_fw_status_to_error(__intel_uc_fw_status(uc_fw)) != 0;
+}
+
 static inline bool intel_uc_fw_is_overridden(const struct intel_uc_fw *uc_fw)
 {
        return uc_fw->user_overridden;