]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/{i915,xe}/panic: split out intel_panic.[ch]
authorJani Nikula <jani.nikula@intel.com>
Tue, 2 Sep 2025 17:51:48 +0000 (20:51 +0300)
committerJani Nikula <jani.nikula@intel.com>
Mon, 8 Sep 2025 11:23:46 +0000 (14:23 +0300)
intel_bo.[ch] is not the appropriate location for the panic
functionality. Split out intel_panic.[ch] and xe_panic.c in i915 and
xe. Keep the function names for now.

Cc: Jocelyn Falempe <jfalempe@redhat.com>
Cc: Maarten Lankhorst <dev@lankhorst.se>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com>
Link: https://lore.kernel.org/r/d98b831a011a028ffd33ce99b0ba62be061ee235.1756835342.git.jani.nikula@intel.com
12 files changed:
drivers/gpu/drm/i915/Makefile
drivers/gpu/drm/i915/display/i9xx_plane.c
drivers/gpu/drm/i915/display/intel_bo.c
drivers/gpu/drm/i915/display/intel_bo.h
drivers/gpu/drm/i915/display/intel_fb.c
drivers/gpu/drm/i915/display/intel_panic.c [new file with mode: 0644]
drivers/gpu/drm/i915/display/intel_panic.h [new file with mode: 0644]
drivers/gpu/drm/i915/display/intel_plane.c
drivers/gpu/drm/i915/display/skl_universal_plane.c
drivers/gpu/drm/xe/Makefile
drivers/gpu/drm/xe/display/intel_bo.c
drivers/gpu/drm/xe/display/xe_panic.c [new file with mode: 0644]

index 85354344307284ecff1f888e29c943412f355b3c..db150a0c33ceb764535e1f1868ace6821cec674c 100644 (file)
@@ -280,6 +280,7 @@ i915-y += \
        display/intel_modeset_setup.o \
        display/intel_modeset_verify.o \
        display/intel_overlay.o \
+       display/intel_panic.o \
        display/intel_pch.o \
        display/intel_pch_display.o \
        display/intel_pch_refclk.o \
index 9a39e9efbfaf1399d20f6ff3297a65a9ad641a85..407deb5dfb57f7b7269580488ebe1f6efcf7a085 100644 (file)
@@ -22,6 +22,7 @@
 #include "intel_fb.h"
 #include "intel_fbc.h"
 #include "intel_frontbuffer.h"
+#include "intel_panic.h"
 #include "intel_plane.h"
 #include "intel_sprite.h"
 
index d29c1508ccb9572a432a2ba7a26ff1413bd09686..6ae1374d5c2b4d3c4a3b52d731e9443ccdc2daac 100644 (file)
@@ -59,18 +59,3 @@ void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj)
 {
        i915_debugfs_describe_obj(m, to_intel_bo(obj));
 }
-
-struct intel_framebuffer *intel_bo_alloc_framebuffer(void)
-{
-       return i915_gem_object_alloc_framebuffer();
-}
-
-int intel_bo_panic_setup(struct drm_scanout_buffer *sb)
-{
-       return i915_gem_object_panic_setup(sb);
-}
-
-void intel_bo_panic_finish(struct intel_framebuffer *fb)
-{
-       return i915_gem_object_panic_finish(fb);
-}
index 97087a64d23b547453abf4d5b3c86d4cd18f060a..48d87019e48a135f5259008542144ba7d8130ab4 100644 (file)
@@ -25,8 +25,5 @@ struct intel_frontbuffer *intel_bo_set_frontbuffer(struct drm_gem_object *obj,
                                                   struct intel_frontbuffer *front);
 
 void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj);
-struct intel_framebuffer *intel_bo_alloc_framebuffer(void);
-int intel_bo_panic_setup(struct drm_scanout_buffer *sb);
-void intel_bo_panic_finish(struct intel_framebuffer *fb);
 
 #endif /* __INTEL_BO__ */
index 3f2cbcd2626da0c68eab7f45eaa0a8bc85e0d654..4b415dfb5a6607c504f84b2c2ca01516bfa53a1e 100644 (file)
@@ -20,6 +20,7 @@
 #include "intel_fb.h"
 #include "intel_fb_bo.h"
 #include "intel_frontbuffer.h"
+#include "intel_panic.h"
 #include "intel_plane.h"
 
 #define check_array_bounds(display, a, i) drm_WARN_ON((display)->drm, (i) >= ARRAY_SIZE(a))
diff --git a/drivers/gpu/drm/i915/display/intel_panic.c b/drivers/gpu/drm/i915/display/intel_panic.c
new file mode 100644 (file)
index 0000000..9eae210
--- /dev/null
@@ -0,0 +1,20 @@
+// SPDX-License-Identifier: MIT
+/* Copyright © 2025 Intel Corporation */
+
+#include "gem/i915_gem_object.h"
+#include "intel_panic.h"
+
+struct intel_framebuffer *intel_bo_alloc_framebuffer(void)
+{
+       return i915_gem_object_alloc_framebuffer();
+}
+
+int intel_bo_panic_setup(struct drm_scanout_buffer *sb)
+{
+       return i915_gem_object_panic_setup(sb);
+}
+
+void intel_bo_panic_finish(struct intel_framebuffer *fb)
+{
+       return i915_gem_object_panic_finish(fb);
+}
diff --git a/drivers/gpu/drm/i915/display/intel_panic.h b/drivers/gpu/drm/i915/display/intel_panic.h
new file mode 100644 (file)
index 0000000..07e7224
--- /dev/null
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: MIT */
+/* Copyright © 2025 Intel Corporation */
+
+#ifndef __INTEL_PANIC_H__
+#define __INTEL_PANIC_H__
+
+struct drm_scanout_buffer;
+struct intel_framebuffer;
+
+struct intel_framebuffer *intel_bo_alloc_framebuffer(void);
+int intel_bo_panic_setup(struct drm_scanout_buffer *sb);
+void intel_bo_panic_finish(struct intel_framebuffer *fb);
+
+#endif /* __INTEL_PANIC_H__ */
index 81f05ee9a21a8012f7682966fc1be800db12cb96..a467e14e6388b0c90d62efa457b60c483d0782b5 100644 (file)
@@ -47,7 +47,6 @@
 #include "gem/i915_gem_object.h"
 #include "i915_scheduler_types.h"
 #include "i9xx_plane_regs.h"
-#include "intel_bo.h"
 #include "intel_cdclk.h"
 #include "intel_cursor.h"
 #include "intel_display_rps.h"
@@ -56,6 +55,7 @@
 #include "intel_fb.h"
 #include "intel_fb_pin.h"
 #include "intel_fbdev.h"
+#include "intel_panic.h"
 #include "intel_plane.h"
 #include "intel_psr.h"
 #include "skl_scaler.h"
index 59ee0830de02f23ebfcc4d940d1758cdee1b23d8..e13fb781e7b20b9d4f26844ef5bde48861b5f2f4 100644 (file)
@@ -20,6 +20,7 @@
 #include "intel_fb.h"
 #include "intel_fbc.h"
 #include "intel_frontbuffer.h"
+#include "intel_panic.h"
 #include "intel_plane.h"
 #include "intel_psr.h"
 #include "intel_psr_regs.h"
index c83d72de81dd26a12bb500b06bd506d470b74d8e..d2202f2a2374cc2b04e913192bc1478e25e5a1f4 100644 (file)
@@ -192,6 +192,7 @@ xe-$(CONFIG_DRM_XE_DISPLAY) += \
        display/xe_dsb_buffer.o \
        display/xe_fb_pin.o \
        display/xe_hdcp_gsc.o \
+       display/xe_panic.o \
        display/xe_plane_initial.o \
        display/xe_tdf.o
 
index 910632f57c3d62aa2e8f2f34ecbd97302f6f6d05..27437c22bd703a46f86c578e846b7cdcda7b32a5 100644 (file)
@@ -1,12 +1,7 @@
 // SPDX-License-Identifier: MIT
 /* Copyright © 2024 Intel Corporation */
 
-#include <drm/drm_cache.h>
 #include <drm/drm_gem.h>
-#include <drm/drm_panic.h>
-
-#include "intel_fb.h"
-#include "intel_display_types.h"
 
 #include "xe_bo.h"
 #include "intel_bo.h"
@@ -64,89 +59,3 @@ void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj)
 {
        /* FIXME */
 }
-
-struct xe_panic_data {
-       struct page **pages;
-       int page;
-       void *vaddr;
-};
-
-struct xe_framebuffer {
-       struct intel_framebuffer base;
-       struct xe_panic_data panic;
-};
-
-static inline struct xe_panic_data *to_xe_panic_data(struct intel_framebuffer *fb)
-{
-       return &container_of_const(fb, struct xe_framebuffer, base)->panic;
-}
-
-static void xe_panic_kunmap(struct xe_panic_data *panic)
-{
-       if (panic->vaddr) {
-               drm_clflush_virt_range(panic->vaddr, PAGE_SIZE);
-               kunmap_local(panic->vaddr);
-               panic->vaddr = NULL;
-       }
-}
-
-/*
- * The scanout buffer pages are not mapped, so for each pixel,
- * use kmap_local_page_try_from_panic() to map the page, and write the pixel.
- * Try to keep the map from the previous pixel, to avoid too much map/unmap.
- */
-static void xe_panic_page_set_pixel(struct drm_scanout_buffer *sb, unsigned int x,
-                                   unsigned int y, u32 color)
-{
-       struct intel_framebuffer *fb = (struct intel_framebuffer *)sb->private;
-       struct xe_panic_data *panic = to_xe_panic_data(fb);
-       struct xe_bo *bo = gem_to_xe_bo(intel_fb_bo(&fb->base));
-       unsigned int new_page;
-       unsigned int offset;
-
-       if (fb->panic_tiling)
-               offset = fb->panic_tiling(sb->width, x, y);
-       else
-               offset = y * sb->pitch[0] + x * sb->format->cpp[0];
-
-       new_page = offset >> PAGE_SHIFT;
-       offset = offset % PAGE_SIZE;
-       if (new_page != panic->page) {
-               xe_panic_kunmap(panic);
-               panic->page = new_page;
-               panic->vaddr = ttm_bo_kmap_try_from_panic(&bo->ttm,
-                                                         panic->page);
-       }
-       if (panic->vaddr) {
-               u32 *pix = panic->vaddr + offset;
-               *pix = color;
-       }
-}
-
-struct intel_framebuffer *intel_bo_alloc_framebuffer(void)
-{
-       struct xe_framebuffer *xe_fb;
-
-       xe_fb = kzalloc(sizeof(*xe_fb), GFP_KERNEL);
-       if (xe_fb)
-               return &xe_fb->base;
-       return NULL;
-}
-
-int intel_bo_panic_setup(struct drm_scanout_buffer *sb)
-{
-       struct intel_framebuffer *fb = (struct intel_framebuffer *)sb->private;
-       struct xe_panic_data *panic = to_xe_panic_data(fb);
-
-       panic->page = -1;
-       sb->set_pixel = xe_panic_page_set_pixel;
-       return 0;
-}
-
-void intel_bo_panic_finish(struct intel_framebuffer *fb)
-{
-       struct xe_panic_data *panic = to_xe_panic_data(fb);
-
-       xe_panic_kunmap(panic);
-       panic->page = -1;
-}
diff --git a/drivers/gpu/drm/xe/display/xe_panic.c b/drivers/gpu/drm/xe/display/xe_panic.c
new file mode 100644 (file)
index 0000000..14fba8a
--- /dev/null
@@ -0,0 +1,96 @@
+// SPDX-License-Identifier: MIT
+/* Copyright © 2025 Intel Corporation */
+
+#include <drm/drm_cache.h>
+#include <drm/drm_panic.h>
+
+#include "intel_display_types.h"
+#include "intel_fb.h"
+#include "intel_panic.h"
+#include "xe_bo.h"
+
+struct xe_panic_data {
+       struct page **pages;
+       int page;
+       void *vaddr;
+};
+
+struct xe_framebuffer {
+       struct intel_framebuffer base;
+       struct xe_panic_data panic;
+};
+
+static inline struct xe_panic_data *to_xe_panic_data(struct intel_framebuffer *fb)
+{
+       return &container_of_const(fb, struct xe_framebuffer, base)->panic;
+}
+
+static void xe_panic_kunmap(struct xe_panic_data *panic)
+{
+       if (panic->vaddr) {
+               drm_clflush_virt_range(panic->vaddr, PAGE_SIZE);
+               kunmap_local(panic->vaddr);
+               panic->vaddr = NULL;
+       }
+}
+
+/*
+ * The scanout buffer pages are not mapped, so for each pixel,
+ * use kmap_local_page_try_from_panic() to map the page, and write the pixel.
+ * Try to keep the map from the previous pixel, to avoid too much map/unmap.
+ */
+static void xe_panic_page_set_pixel(struct drm_scanout_buffer *sb, unsigned int x,
+                                   unsigned int y, u32 color)
+{
+       struct intel_framebuffer *fb = (struct intel_framebuffer *)sb->private;
+       struct xe_panic_data *panic = to_xe_panic_data(fb);
+       struct xe_bo *bo = gem_to_xe_bo(intel_fb_bo(&fb->base));
+       unsigned int new_page;
+       unsigned int offset;
+
+       if (fb->panic_tiling)
+               offset = fb->panic_tiling(sb->width, x, y);
+       else
+               offset = y * sb->pitch[0] + x * sb->format->cpp[0];
+
+       new_page = offset >> PAGE_SHIFT;
+       offset = offset % PAGE_SIZE;
+       if (new_page != panic->page) {
+               xe_panic_kunmap(panic);
+               panic->page = new_page;
+               panic->vaddr = ttm_bo_kmap_try_from_panic(&bo->ttm,
+                                                         panic->page);
+       }
+       if (panic->vaddr) {
+               u32 *pix = panic->vaddr + offset;
+               *pix = color;
+       }
+}
+
+struct intel_framebuffer *intel_bo_alloc_framebuffer(void)
+{
+       struct xe_framebuffer *xe_fb;
+
+       xe_fb = kzalloc(sizeof(*xe_fb), GFP_KERNEL);
+       if (xe_fb)
+               return &xe_fb->base;
+       return NULL;
+}
+
+int intel_bo_panic_setup(struct drm_scanout_buffer *sb)
+{
+       struct intel_framebuffer *fb = (struct intel_framebuffer *)sb->private;
+       struct xe_panic_data *panic = to_xe_panic_data(fb);
+
+       panic->page = -1;
+       sb->set_pixel = xe_panic_page_set_pixel;
+       return 0;
+}
+
+void intel_bo_panic_finish(struct intel_framebuffer *fb)
+{
+       struct xe_panic_data *panic = to_xe_panic_data(fb);
+
+       xe_panic_kunmap(panic);
+       panic->page = -1;
+}