]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/bochs: Add support for drm_panic
authorRyosuke Yasuoka <ryasuoka@redhat.com>
Fri, 13 Jun 2025 13:20:14 +0000 (22:20 +0900)
committerJocelyn Falempe <jfalempe@redhat.com>
Mon, 23 Jun 2025 09:30:18 +0000 (11:30 +0200)
Add drm_panic module for bochs drm so that panic screen can be displayed
on panic.

Signed-off-by: Ryosuke Yasuoka <ryasuoka@redhat.com>
Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com>
Link: https://lore.kernel.org/r/20250613132023.106946-1-ryasuoka@redhat.com
Signed-off-by: Jocelyn Falempe <jfalempe@redhat.com>
drivers/gpu/drm/tiny/bochs.c

index 8706763af8fba5fd681e0668101a42b2a4ec88b5..8d3b7c4fa6a49e18d4067a13aeb49e5f65d8ebfc 100644 (file)
@@ -19,6 +19,7 @@
 #include <drm/drm_gem_shmem_helper.h>
 #include <drm/drm_managed.h>
 #include <drm/drm_module.h>
+#include <drm/drm_panic.h>
 #include <drm/drm_plane_helper.h>
 #include <drm/drm_probe_helper.h>
 
@@ -469,10 +470,28 @@ static void bochs_primary_plane_helper_atomic_update(struct drm_plane *plane,
        bochs_hw_setformat(bochs, fb->format);
 }
 
+static int bochs_primary_plane_helper_get_scanout_buffer(struct drm_plane *plane,
+                                                        struct drm_scanout_buffer *sb)
+{
+       struct bochs_device *bochs = to_bochs_device(plane->dev);
+       struct iosys_map map = IOSYS_MAP_INIT_VADDR_IOMEM(bochs->fb_map);
+
+       if (plane->state && plane->state->fb) {
+               sb->format = plane->state->fb->format;
+               sb->width = plane->state->fb->width;
+               sb->height = plane->state->fb->height;
+               sb->pitch[0] = plane->state->fb->pitches[0];
+               sb->map[0] = map;
+               return 0;
+       }
+       return -ENODEV;
+}
+
 static const struct drm_plane_helper_funcs bochs_primary_plane_helper_funcs = {
        DRM_GEM_SHADOW_PLANE_HELPER_FUNCS,
        .atomic_check = bochs_primary_plane_helper_atomic_check,
        .atomic_update = bochs_primary_plane_helper_atomic_update,
+       .get_scanout_buffer = bochs_primary_plane_helper_get_scanout_buffer,
 };
 
 static const struct drm_plane_funcs bochs_primary_plane_funcs = {