#include "intel_fb.h"
#include "intel_fbc.h"
#include "intel_frontbuffer.h"
-#include "intel_panic.h"
#include "intel_plane.h"
#include "intel_sprite.h"
#include "intel_fb.h"
#include "intel_fb_bo.h"
#include "intel_frontbuffer.h"
-#include "intel_panic.h"
#include "intel_parent.h"
#include "intel_plane.h"
int ret;
int i;
- intel_fb->panic = intel_panic_alloc();
+ intel_fb->panic = intel_parent_panic_alloc(display);
if (!intel_fb->panic)
return -ENOMEM;
+++ /dev/null
-/* SPDX-License-Identifier: MIT */
-/* Copyright © 2025 Intel Corporation */
-
-#ifndef __INTEL_PANIC_H__
-#define __INTEL_PANIC_H__
-
-struct drm_scanout_buffer;
-struct intel_panic;
-
-struct intel_panic *intel_panic_alloc(void);
-int intel_panic_setup(struct intel_panic *panic, struct drm_scanout_buffer *sb);
-void intel_panic_finish(struct intel_panic *panic);
-
-#endif /* __INTEL_PANIC_H__ */
display->parent->hdcp->gsc_context_free(gsc_context);
}
+struct intel_panic *intel_parent_panic_alloc(struct intel_display *display)
+{
+ return display->parent->panic->alloc();
+}
+
+int intel_parent_panic_setup(struct intel_display *display, struct intel_panic *panic, struct drm_scanout_buffer *sb)
+{
+ return display->parent->panic->setup(panic, sb);
+}
+
+void intel_parent_panic_finish(struct intel_display *display, struct intel_panic *panic)
+{
+ display->parent->panic->finish(panic);
+}
+
bool intel_parent_irq_enabled(struct intel_display *display)
{
return display->parent->irq->enabled(display->drm);
#include <linux/types.h>
struct dma_fence;
+struct drm_scanout_buffer;
struct intel_display;
struct intel_hdcp_gsc_context;
+struct intel_panic;
struct intel_stolen_node;
ssize_t intel_parent_hdcp_gsc_msg_send(struct intel_display *display,
bool intel_parent_irq_enabled(struct intel_display *display);
void intel_parent_irq_synchronize(struct intel_display *display);
+struct intel_panic *intel_parent_panic_alloc(struct intel_display *display);
+int intel_parent_panic_setup(struct intel_display *display, struct intel_panic *panic, struct drm_scanout_buffer *sb);
+void intel_parent_panic_finish(struct intel_display *display, struct intel_panic *panic);
+
bool intel_parent_rps_available(struct intel_display *display);
void intel_parent_rps_boost_if_not_started(struct intel_display *display, struct dma_fence *fence);
void intel_parent_rps_mark_interactive(struct intel_display *display, bool interactive);
#include "intel_fb.h"
#include "intel_fb_pin.h"
#include "intel_fbdev.h"
-#include "intel_panic.h"
#include "intel_parent.h"
#include "intel_plane.h"
#include "intel_psr.h"
const struct intel_crtc_state *crtc_state = to_intel_crtc_state(crtc->base.state);
const struct intel_framebuffer *fb = to_intel_framebuffer(plane_state->hw.fb);
- intel_panic_finish(fb->panic);
+ intel_parent_panic_finish(display, fb->panic);
if (crtc_state->enable_psr2_sel_fetch) {
/* Force a full update for psr2 */
return -EOPNOTSUPP;
}
sb->private = fb;
- ret = intel_panic_setup(fb->panic, sb);
+ ret = intel_parent_panic_setup(display, fb->panic, sb);
if (ret)
return ret;
}
#include "intel_fb.h"
#include "intel_fbc.h"
#include "intel_frontbuffer.h"
-#include "intel_panic.h"
#include "intel_parent.h"
#include "intel_plane.h"
#include "intel_psr.h"
#include "i915_ioctl.h"
#include "i915_irq.h"
#include "i915_memcpy.h"
+#include "i915_panic.h"
#include "i915_perf.h"
#include "i915_query.h"
#include "i915_reg.h"
static const struct intel_display_parent_interface parent = {
.hdcp = &i915_display_hdcp_interface,
+ .panic = &i915_display_panic_interface,
.rpm = &i915_display_rpm_interface,
.irq = &i915_display_irq_interface,
.rps = &i915_display_rps_interface,
/* Copyright © 2025 Intel Corporation */
#include <drm/drm_panic.h>
+#include <drm/intel/display_parent_interface.h>
#include "display/intel_display_types.h"
#include "display/intel_fb.h"
-#include "display/intel_panic.h"
#include "gem/i915_gem_object.h"
-struct intel_panic *intel_panic_alloc(void)
+#include "i915_panic.h"
+
+static struct intel_panic *intel_panic_alloc(void)
{
return i915_gem_object_alloc_panic();
}
-int intel_panic_setup(struct intel_panic *panic, struct drm_scanout_buffer *sb)
+static int intel_panic_setup(struct intel_panic *panic, struct drm_scanout_buffer *sb)
{
struct intel_framebuffer *fb = sb->private;
struct drm_gem_object *obj = intel_fb_bo(&fb->base);
return i915_gem_object_panic_setup(panic, sb, obj, fb->panic_tiling);
}
-void intel_panic_finish(struct intel_panic *panic)
+static void intel_panic_finish(struct intel_panic *panic)
{
return i915_gem_object_panic_finish(panic);
}
+
+const struct intel_display_panic_interface i915_display_panic_interface = {
+ .alloc = intel_panic_alloc,
+ .setup = intel_panic_setup,
+ .finish = intel_panic_finish,
+};
--- /dev/null
+/* SPDX-License-Identifier: MIT */
+/* Copyright © 2025 Intel Corporation */
+
+#ifndef __I915_PANIC_H__
+#define __I915_PANIC_H__
+
+extern const struct intel_display_panic_interface i915_display_panic_interface;
+
+#endif /* __I915_PANIC_H__ */
#include "xe_display_rpm.h"
#include "xe_hdcp_gsc.h"
#include "xe_module.h"
+#include "xe_panic.h"
#include "xe_stolen.h"
/* Ensure drm and display members are placed properly. */
static const struct intel_display_parent_interface parent = {
.hdcp = &xe_display_hdcp_interface,
+ .panic = &xe_display_panic_interface,
.rpm = &xe_display_rpm_interface,
.irq = &xe_display_irq_interface,
.stolen = &xe_display_stolen_interface,
#include <drm/drm_cache.h>
#include <drm/drm_panic.h>
+#include <drm/intel/display_parent_interface.h>
#include "intel_display_types.h"
#include "intel_fb.h"
-#include "intel_panic.h"
#include "xe_bo.h"
+#include "xe_panic.h"
#include "xe_res_cursor.h"
struct intel_panic {
iosys_map_wr(&panic->vmap, offset, u32, color);
}
-struct intel_panic *intel_panic_alloc(void)
+static struct intel_panic *xe_panic_alloc(void)
{
struct intel_panic *panic;
return panic;
}
-int intel_panic_setup(struct intel_panic *panic, struct drm_scanout_buffer *sb)
+static int xe_panic_setup(struct intel_panic *panic, struct drm_scanout_buffer *sb)
{
struct intel_framebuffer *fb = (struct intel_framebuffer *)sb->private;
struct xe_bo *bo = gem_to_xe_bo(intel_fb_bo(&fb->base));
return 0;
}
-void intel_panic_finish(struct intel_panic *panic)
-{
- xe_panic_kunmap(panic);
-}
+const struct intel_display_panic_interface xe_display_panic_interface = {
+ .alloc = xe_panic_alloc,
+ .setup = xe_panic_setup,
+ .finish = xe_panic_kunmap,
+};
--- /dev/null
+/* SPDX-License-Identifier: MIT */
+/* Copyright © 2025 Intel Corporation */
+
+#ifndef __XE_PANIC_H__
+#define __XE_PANIC_H__
+
+extern const struct intel_display_panic_interface xe_display_panic_interface;
+
+#endif
struct dma_fence;
struct drm_device;
+struct drm_scanout_buffer;
struct intel_hdcp_gsc_context;
+struct intel_panic;
struct intel_stolen_node;
struct ref_tracker;
void (*synchronize)(struct drm_device *drm);
};
+struct intel_display_panic_interface {
+ struct intel_panic *(*alloc)(void);
+ int (*setup)(struct intel_panic *panic, struct drm_scanout_buffer *sb);
+ void (*finish)(struct intel_panic *panic);
+};
+
struct intel_display_rps_interface {
void (*boost_if_not_started)(struct dma_fence *fence);
void (*mark_interactive)(struct drm_device *drm, bool interactive);
/** @irq: IRQ interface */
const struct intel_display_irq_interface *irq;
+ /** @panic: Panic interface */
+ const struct intel_display_panic_interface *panic;
+
/** @rpm: RPS interface. Optional. */
const struct intel_display_rps_interface *rps;