display/intel_display_power_well.o \
        display/intel_display_reset.o \
        display/intel_display_rps.o \
+       display/intel_display_snapshot.o \
        display/intel_display_wa.o \
        display/intel_dmc.o \
        display/intel_dmc_wl.o \
 
--- /dev/null
+// SPDX-License-Identifier: MIT
+/* Copyright © 2024 Intel Corporation */
+
+#include <linux/slab.h>
+
+#include "intel_display_snapshot.h"
+#include "intel_overlay.h"
+
+struct intel_display_snapshot {
+       struct intel_overlay_snapshot *overlay;
+};
+
+struct intel_display_snapshot *intel_display_snapshot_capture(struct intel_display *display)
+{
+       struct intel_display_snapshot *snapshot;
+
+       snapshot = kzalloc(sizeof(*snapshot), GFP_ATOMIC);
+       if (!snapshot)
+               return NULL;
+
+       snapshot->overlay = intel_overlay_snapshot_capture(display);
+
+       return snapshot;
+}
+
+void intel_display_snapshot_print(const struct intel_display_snapshot *snapshot,
+                                 struct drm_printer *p)
+{
+       if (!snapshot)
+               return;
+
+       intel_overlay_snapshot_print(snapshot->overlay, p);
+}
+
+void intel_display_snapshot_free(struct intel_display_snapshot *snapshot)
+{
+       if (!snapshot)
+               return;
+
+       kfree(snapshot->overlay);
+       kfree(snapshot);
+}
 
--- /dev/null
+/* SPDX-License-Identifier: MIT */
+/* Copyright © 2024 Intel Corporation */
+
+#ifndef __INTEL_DISPLAY_SNAPSHOT_H__
+#define __INTEL_DISPLAY_SNAPSHOT_H__
+
+struct drm_printer;
+struct intel_display;
+struct intel_display_snapshot;
+
+struct intel_display_snapshot *intel_display_snapshot_capture(struct intel_display *display);
+void intel_display_snapshot_print(const struct intel_display_snapshot *snapshot,
+                                 struct drm_printer *p);
+void intel_display_snapshot_free(struct intel_display_snapshot *snapshot);
+
+#endif /* __INTEL_DISPLAY_SNAPSHOT_H__ */
 
 
 #if IS_ENABLED(CONFIG_DRM_I915_CAPTURE_ERROR)
 
-struct intel_overlay_error_state {
+struct intel_overlay_snapshot {
        struct overlay_registers regs;
        unsigned long base;
        u32 dovsta;
        u32 isr;
 };
 
-struct intel_overlay_error_state *
-intel_overlay_capture_error_state(struct drm_i915_private *dev_priv)
+struct intel_overlay_snapshot *
+intel_overlay_snapshot_capture(struct intel_display *display)
 {
+       struct drm_i915_private *dev_priv = to_i915(display->drm);
        struct intel_overlay *overlay = dev_priv->display.overlay;
-       struct intel_overlay_error_state *error;
+       struct intel_overlay_snapshot *error;
 
        if (!overlay || !overlay->active)
                return NULL;
 }
 
 void
-intel_overlay_print_error_state(struct drm_printer *p,
-                               struct intel_overlay_error_state *error)
+intel_overlay_snapshot_print(const struct intel_overlay_snapshot *error,
+                            struct drm_printer *p)
 {
+       if (!error)
+               return;
+
        drm_printf(p, "Overlay, status: 0x%08x, interrupt: 0x%08x\n",
                   error->dovsta, error->isr);
        drm_printf(p, "  Register file at 0x%08lx:\n", error->base);
 
 #ifndef __INTEL_OVERLAY_H__
 #define __INTEL_OVERLAY_H__
 
+#include <linux/types.h>
+
 struct drm_device;
 struct drm_file;
 struct drm_i915_private;
 struct drm_printer;
+struct intel_display;
 struct intel_overlay;
-struct intel_overlay_error_state;
+struct intel_overlay_snapshot;
 
 #ifdef I915
 void intel_overlay_setup(struct drm_i915_private *dev_priv);
 int intel_overlay_attrs_ioctl(struct drm_device *dev, void *data,
                              struct drm_file *file_priv);
 void intel_overlay_reset(struct drm_i915_private *dev_priv);
-struct intel_overlay_error_state *
-intel_overlay_capture_error_state(struct drm_i915_private *dev_priv);
-void intel_overlay_print_error_state(struct drm_printer *p,
-                                    struct intel_overlay_error_state *error);
 #else
 static inline void intel_overlay_setup(struct drm_i915_private *dev_priv)
 {
 static inline void intel_overlay_reset(struct drm_i915_private *dev_priv)
 {
 }
-static inline struct intel_overlay_error_state *
-intel_overlay_capture_error_state(struct drm_i915_private *dev_priv)
+#endif
+
+#if IS_ENABLED(CONFIG_DRM_I915_CAPTURE_ERROR) && defined(I915)
+struct intel_overlay_snapshot *
+intel_overlay_snapshot_capture(struct intel_display *display);
+void intel_overlay_snapshot_print(const struct intel_overlay_snapshot *error,
+                                 struct drm_printer *p);
+#else
+static inline struct intel_overlay_snapshot *
+intel_overlay_snapshot_capture(struct intel_display *display)
 {
        return NULL;
 }
-static inline void intel_overlay_print_error_state(struct drm_printer *p,
-                                                  struct intel_overlay_error_state *error)
+static inline void intel_overlay_snapshot_print(const struct intel_overlay_snapshot *error,
+                                               struct drm_printer *p)
 {
 }
 #endif
 
 #include <drm/drm_cache.h>
 #include <drm/drm_print.h>
 
+#include "display/intel_display_snapshot.h"
 #include "display/intel_dmc.h"
-#include "display/intel_overlay.h"
 
 #include "gem/i915_gem_context.h"
 #include "gem/i915_gem_lmem.h"
                err_print_gt_info(m, error->gt);
        }
 
-       if (error->overlay)
-               intel_overlay_print_error_state(&p, error->overlay);
-
        err_print_capabilities(m, error);
        err_print_params(m, &error->params);
+
+       intel_display_snapshot_print(error->display_snapshot, &p);
 }
 
 static int err_print_to_sgl(struct i915_gpu_coredump *error)
                cleanup_gt(gt);
        }
 
-       kfree(error->overlay);
+       intel_display_snapshot_free(error->display_snapshot);
 
        cleanup_params(error);
 
 __i915_gpu_coredump(struct intel_gt *gt, intel_engine_mask_t engine_mask, u32 dump_flags)
 {
        struct drm_i915_private *i915 = gt->i915;
+       struct intel_display *display = &i915->display;
        struct i915_gpu_coredump *error;
 
        /* Check if GPU capture has been disabled */
                error->simulated |= error->gt->simulated;
        }
 
-       error->overlay = intel_overlay_capture_error_state(i915);
+       error->display_snapshot = intel_display_snapshot_capture(display);
 
        return error;
 }
 
 struct drm_i915_private;
 struct i915_vma_compress;
 struct intel_engine_capture_vma;
-struct intel_overlay_error_state;
+struct intel_display_snapshot;
 
 struct i915_vma_coredump {
        struct i915_vma_coredump *next;
        struct i915_params params;
        struct intel_display_params display_params;
 
-       struct intel_overlay_error_state *overlay;
-
        struct scatterlist *sgl, *fit;
+
+       struct intel_display_snapshot *display_snapshot;
 };
 
 struct i915_gpu_error {