drm/simpledrm: Add drm_panic support
authorJocelyn Falempe <jfalempe@redhat.com>
Tue, 9 Apr 2024 16:30:45 +0000 (18:30 +0200)
committerJocelyn Falempe <jfalempe@redhat.com>
Mon, 15 Apr 2024 14:13:39 +0000 (16:13 +0200)
Add support for the drm_panic module, which displays a user-friendly
message to the screen when a kernel panic occurs.

v8:
 * Replace get_scanout_buffer() with drm_panic_set_buffer()
   (Thomas Zimmermann)

v9:
 * Revert to using get_scanout_buffer() (Sima)
 * move get_scanout_buffer() to plane helper functions (Thomas Zimmermann)

v12:
 * Use array for map and pitch in struct drm_scanout_buffer
   to support multi-planar format later. (Thomas Zimmermann)

Signed-off-by: Jocelyn Falempe <jfalempe@redhat.com>
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
Link: https://patchwork.freedesktop.org/patch/msgid/20240409163432.352518-7-jfalempe@redhat.com
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/tiny/simpledrm.c

index 7ce1c4617675060f75756014a38c37449f20912c..1d8fa07572c52da24d3e8cef40e89df41d696bdf 100644 (file)
@@ -25,6 +25,7 @@
 #include <drm/drm_gem_shmem_helper.h>
 #include <drm/drm_managed.h>
 #include <drm/drm_modeset_helper_vtables.h>
+#include <drm/drm_panic.h>
 #include <drm/drm_probe_helper.h>
 
 #define DRIVER_NAME    "simpledrm"
@@ -671,11 +672,26 @@ static void simpledrm_primary_plane_helper_atomic_disable(struct drm_plane *plan
        drm_dev_exit(idx);
 }
 
+static int simpledrm_primary_plane_helper_get_scanout_buffer(struct drm_plane *plane,
+                                                            struct drm_scanout_buffer *sb)
+{
+       struct simpledrm_device *sdev = simpledrm_device_of_dev(plane->dev);
+
+       sb->width = sdev->mode.hdisplay;
+       sb->height = sdev->mode.vdisplay;
+       sb->format = sdev->format;
+       sb->pitch[0] = sdev->pitch;
+       sb->map[0] = sdev->screen_base;
+
+       return 0;
+}
+
 static const struct drm_plane_helper_funcs simpledrm_primary_plane_helper_funcs = {
        DRM_GEM_SHADOW_PLANE_HELPER_FUNCS,
        .atomic_check = simpledrm_primary_plane_helper_atomic_check,
        .atomic_update = simpledrm_primary_plane_helper_atomic_update,
        .atomic_disable = simpledrm_primary_plane_helper_atomic_disable,
+       .get_scanout_buffer = simpledrm_primary_plane_helper_get_scanout_buffer,
 };
 
 static const struct drm_plane_funcs simpledrm_primary_plane_funcs = {