]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
ply-device-manager: Add plymouth.force-frame-buffer-on-boot parameter, allow to choos...
authorshiptux <shiptux@gmail.com>
Sat, 27 Aug 2022 07:09:57 +0000 (15:09 +0800)
committerRay Strode <halfline@gmail.com>
Sat, 15 Oct 2022 16:17:16 +0000 (16:17 +0000)
Some hardware vendor may not open source display driver. (Such as pangu
M900). They load drm driver via kernel modules. On such devices, drm driver
load more slowly then other devices, which may cause logo show later and no
seem to get the Plymouth decryption screen to show. To avoid this problem,
add a bootargs for people who want to forced use fb in plymouth.

When found "plymouth.force-frame-buffer-on-boot flags" in kernel parameter,
During the system start, PLY_DEVICE_MANAGER_FLAGS_FORCE_FRAM_BUFFER will be
add to device_manager_flags. Then "force_fb" mode  will enable, and the
renderer_type set as framebuffer.

Signed-off-by: shiptux <shiptux@gmail.com>
src/libply-splash-core/ply-device-manager.c
src/libply-splash-core/ply-device-manager.h
src/main.c

index 600132ca14c48fcb0cb563a901715d9b605f85a4..f87466ffa5c389d039f23741dd47c99ba4fabdfd 100644 (file)
@@ -302,6 +302,10 @@ create_devices_for_udev_device (ply_device_manager_t *manager,
 {
         const char *device_path;
         bool created = false;
+        bool force_fb = false;
+
+        if (manager->flags & PLY_DEVICE_MANAGER_FLAGS_FORCE_FRAME_BUFFER)
+                force_fb = true;
 
         device_path = udev_device_get_devnode (device);
 
@@ -323,6 +327,8 @@ create_devices_for_udev_device (ply_device_manager_t *manager,
                         ply_trace ("found frame buffer device %s", device_path);
                         if (!fb_device_has_drm_device (manager, device))
                                 renderer_type = PLY_RENDERER_TYPE_FRAME_BUFFER;
+                        else if (force_fb)
+                                renderer_type = PLY_RENDERER_TYPE_FRAME_BUFFER;
                         else
                                 ply_trace ("ignoring, since there's a DRM device associated with it");
                 }
index 676012f0f6648dbf156207f77dff4a9520930c91..820ecc3946da58db8671a98f1e77ea7f83b1a93a 100644 (file)
@@ -32,7 +32,8 @@ typedef enum
         PLY_DEVICE_MANAGER_FLAGS_NONE                   = 0,
         PLY_DEVICE_MANAGER_FLAGS_IGNORE_SERIAL_CONSOLES = 1 << 0,
         PLY_DEVICE_MANAGER_FLAGS_IGNORE_UDEV            = 1 << 1,
-        PLY_DEVICE_MANAGER_FLAGS_SKIP_RENDERERS         = 1 << 2
+        PLY_DEVICE_MANAGER_FLAGS_SKIP_RENDERERS         = 1 << 2,
+        PLY_DEVICE_MANAGER_FLAGS_FORCE_FRAME_BUFFER     = 1 << 3
 } ply_device_manager_flags_t;
 
 typedef struct _ply_device_manager ply_device_manager_t;
index 3a987873af9cb45f0966b12a12e30d7b19c1e294..debe3f8924a0680455d2fb20db7d1800c2a2b5df 100644 (file)
@@ -2358,6 +2358,11 @@ main (int    argc,
             (getenv ("DISPLAY") != NULL))
                 device_manager_flags |= PLY_DEVICE_MANAGER_FLAGS_IGNORE_UDEV;
 
+        if ((ply_kernel_command_line_has_argument ("plymouth.force-frame-buffer-on-boot")) &&
+            state.mode != PLY_BOOT_SPLASH_MODE_SHUTDOWN &&
+            state.mode != PLY_BOOT_SPLASH_MODE_REBOOT)
+                device_manager_flags |= PLY_DEVICE_MANAGER_FLAGS_FORCE_FRAME_BUFFER;
+
         if (!plymouth_should_show_default_splash (&state)) {
                 /* don't bother listening for udev events or setting up a graphical renderer
                  * if we're forcing details */