]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/i915/reset: decide whether display reset is needed on gt side
authorJani Nikula <jani.nikula@intel.com>
Mon, 3 Mar 2025 11:27:08 +0000 (13:27 +0200)
committerJani Nikula <jani.nikula@intel.com>
Wed, 5 Mar 2025 10:48:22 +0000 (12:48 +0200)
Move the checks for whether display reset is needed at all to gt side of
things. This way, we can decide to skip the display calls altogether if
display reset is not required.

Cc: Matt Roper <matthew.d.roper@intel.com>
Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/c32a88f292f516ec702bd07001ac609b8acc2888.1741001054.git.jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
drivers/gpu/drm/i915/display/intel_display_reset.c
drivers/gpu/drm/i915/gt/intel_reset.c

index acc728c75328f4f64ed72cd793bc84ced524ed34..c48d822db58ea7303ca68220f5647e99e6343d5d 100644 (file)
@@ -38,11 +38,6 @@ bool intel_display_reset_prepare(struct intel_display *display)
        if (!HAS_DISPLAY(display))
                return false;
 
-       /* reset doesn't touch the display */
-       if (!intel_display_reset_test(display) &&
-           !gpu_reset_clobbers_display(display))
-               return false;
-
        if (atomic_read(&display->restore.pending_fb_pin)) {
                drm_dbg_kms(display->drm,
                            "Modeset potentially stuck, unbreaking through wedging\n");
index d8425ce019dfa0e6dc6e8c9e032e425c72d13d41..23f3fdaadb337036cbc6c95efbe749b47eb0047c 100644 (file)
@@ -1422,9 +1422,17 @@ static void intel_gt_reset_global(struct intel_gt *gt,
        intel_wedge_on_timeout(&w, gt, 60 * HZ) {
                struct drm_i915_private *i915 = gt->i915;
                struct intel_display *display = &i915->display;
+               bool need_display_reset;
                bool reset_display;
 
-               reset_display = intel_display_reset_prepare(display);
+               need_display_reset = intel_gt_gpu_reset_clobbers_display(gt) &&
+                       intel_has_gpu_reset(gt);
+
+               reset_display = intel_display_reset_test(display) ||
+                       need_display_reset;
+
+               if (reset_display)
+                       reset_display = intel_display_reset_prepare(display);
 
                intel_gt_reset(gt, engine_mask, reason);