// SPDX-License-Identifier: MIT
/* Copyright © 2025 Intel Corporation */
+#include <drm/drm_panic.h>
+
#include "gem/i915_gem_object.h"
+#include "intel_display_types.h"
+#include "intel_fb.h"
#include "intel_panic.h"
struct intel_panic *intel_panic_alloc(void)
return i915_gem_object_alloc_panic();
}
-int intel_panic_setup(struct drm_scanout_buffer *sb)
+int intel_panic_setup(struct intel_panic *panic, struct drm_scanout_buffer *sb)
{
- return i915_gem_object_panic_setup(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)
struct intel_panic;
struct intel_panic *intel_panic_alloc(void);
-int intel_panic_setup(struct drm_scanout_buffer *sb);
+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__ */
return -EOPNOTSUPP;
}
sb->private = intel_fb;
- ret = intel_panic_setup(sb);
+ ret = intel_panic_setup(intel_fb->panic, sb);
if (ret)
return ret;
}
int i915_gem_object_truncate(struct drm_i915_gem_object *obj);
struct intel_panic *i915_gem_object_alloc_panic(void);
-int i915_gem_object_panic_setup(struct drm_scanout_buffer *sb);
+int i915_gem_object_panic_setup(struct intel_panic *panic, struct drm_scanout_buffer *sb,
+ struct drm_gem_object *_obj, bool panic_tiling);
void i915_gem_object_panic_finish(struct intel_panic *panic);
/**
* Use current vaddr if it exists, or setup a list of pages.
* pfn is not supported yet.
*/
-int i915_gem_object_panic_setup(struct drm_scanout_buffer *sb)
+int i915_gem_object_panic_setup(struct intel_panic *panic, struct drm_scanout_buffer *sb,
+ struct drm_gem_object *_obj, bool panic_tiling)
{
enum i915_map_type has_type;
- struct intel_framebuffer *fb = (struct intel_framebuffer *)sb->private;
- struct intel_panic *panic = fb->panic;
- struct drm_i915_gem_object *obj = to_intel_bo(intel_fb_bo(&fb->base));
+ struct drm_i915_gem_object *obj = to_intel_bo(_obj);
void *ptr;
ptr = page_unpack_bits(obj->mm.mapping, &has_type);
else
iosys_map_set_vaddr(&sb->map[0], ptr);
- if (fb->panic_tiling)
+ if (panic_tiling)
sb->set_pixel = i915_gem_object_panic_map_set_pixel;
return 0;
}
return panic;
}
-int intel_panic_setup(struct drm_scanout_buffer *sb)
+int intel_panic_setup(struct intel_panic *panic, struct drm_scanout_buffer *sb)
{
- struct intel_framebuffer *fb = (struct intel_framebuffer *)sb->private;
- struct intel_panic *panic = fb->panic;
-
panic->page = -1;
sb->set_pixel = xe_panic_page_set_pixel;
return 0;