]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
Make simpledrm selection configurable from config file
authorHans de Goede <hdegoede@redhat.com>
Mon, 17 Feb 2025 14:47:11 +0000 (15:47 +0100)
committerHans de Goede <hdegoede@redhat.com>
Mon, 10 Mar 2025 10:45:27 +0000 (11:45 +0100)
Move the handling of the "plymouth.use-simpledrm" commandline argument from
ply-device-manager to main.c, and allow specifying its default value in
the "[Daemon]" section of the config-file using a new UseSimpledrm keyword.

Extend the "plymouth.use-simpledrm" handling to also accept a value e.g.
"plymouth.use-simpledrm=0" to allow overriding a "UseSimpledrm=1" in
the configfile.

And pass the use-simpledrm value to ply_device_manager_new () through a new
PLY_DEVICE_MANAGER_FLAGS_USE_SIMPLEDRM flag.

This also moves the kernel commandline handling to src/main.c grouping
it together with most of the other commandline handling.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
src/libply-splash-core/ply-device-manager.c
src/libply-splash-core/ply-device-manager.h
src/main.c

index bbfbd50d7bfb2cdc216e16c102de6706f4c1487b..79c44283942c880f35e869808ec30a06c659dd90 100644 (file)
@@ -346,7 +346,8 @@ syspath_is_simpledrm (const char *syspath)
 }
 
 static bool
-verify_drm_device (struct udev_device *device)
+verify_drm_device (ply_device_manager_t *manager,
+                   struct udev_device   *device)
 {
         /*
          * Simple-framebuffer devices driven by simpledrm lack information
@@ -359,21 +360,7 @@ verify_drm_device (struct udev_device *device)
         if (!syspath_is_simpledrm (udev_device_get_syspath (device)))
                 return true; /* Not a SimpleDRM device */
 
-        /*
-         * With nomodeset, no native drivers will load, so SimpleDRM devices
-         * should be used immediately.
-         */
-        if (ply_kernel_command_line_has_argument ("nomodeset"))
-                return true;
-
-        /*
-         * Some firmwares leave the panel black at boot. Allow enabling SimpleDRM
-         * use from the cmdline to show something to the user ASAP.
-         */
-        if (ply_kernel_command_line_has_argument ("plymouth.use-simpledrm"))
-                return true;
-
-        return false;
+        return manager->flags & PLY_DEVICE_MANAGER_FLAGS_USE_SIMPLEDRM;
 }
 
 static bool
@@ -399,7 +386,8 @@ create_devices_for_udev_device (ply_device_manager_t *manager,
                 ply_trace ("device subsystem is %s", subsystem);
 
                 if (strcmp (subsystem, SUBSYSTEM_DRM) == 0) {
-                        if (!manager->device_timeout_elapsed && !verify_drm_device (device)) {
+                        if (!manager->device_timeout_elapsed &&
+                            !verify_drm_device (manager, device)) {
                                 ply_trace ("ignoring since we only handle SimpleDRM devices after timeout");
                                 return false;
                         }
index 820ecc3946da58db8671a98f1e77ea7f83b1a93a..dea30917ce8e686032f6373c006a1497d3034ee3 100644 (file)
@@ -33,7 +33,8 @@ typedef enum
         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_FORCE_FRAME_BUFFER     = 1 << 3
+        PLY_DEVICE_MANAGER_FLAGS_FORCE_FRAME_BUFFER     = 1 << 3,
+        PLY_DEVICE_MANAGER_FLAGS_USE_SIMPLEDRM          = 1 << 4,
 } ply_device_manager_flags_t;
 
 typedef struct _ply_device_manager ply_device_manager_t;
index 678e4b3efe33b409ed32ca1194723500ea40c547..56d366ebf468cce0588ebb1b75b60aab90d1c398 100644 (file)
@@ -102,6 +102,7 @@ typedef struct
         double                  splash_delay;
         double                  device_timeout;
         int                     device_scale;
+        int                     use_simpledrm;
 
         uint32_t                no_boot_log : 1;
         uint32_t                showing_details : 1;
@@ -339,6 +340,9 @@ load_settings (state_t    *state,
         if (state->device_scale == -1)
                 state->device_scale = ply_key_file_get_ulong (key_file, "Daemon", "DeviceScale", -1);
 
+        if (state->use_simpledrm == -1)
+                state->use_simpledrm = ply_key_file_get_ulong (key_file, "Daemon", "UseSimpledrm", -1);
+
         settings_loaded = true;
 out:
         free (splash_string);
@@ -400,6 +404,16 @@ find_override_splash (state_t *state)
 
         if (state->device_scale == -1)
                 state->device_scale = ply_kernel_command_line_get_ulong ("plymouth.force-scale=", -1);
+
+        if (state->use_simpledrm == -1)
+                state->use_simpledrm = ply_kernel_command_line_get_ulong ("plymouth.use-simpledrm=", -1);
+
+        if (state->use_simpledrm == -1) {
+                if (ply_kernel_command_line_has_argument ("plymouth.use-simpledrm"))
+                        state->use_simpledrm = 1;
+                else if (ply_kernel_command_line_has_argument ("nomodeset"))
+                        state->use_simpledrm = 1;
+        }
 }
 
 static void
@@ -2521,6 +2535,7 @@ main (int    argc,
         state.splash_delay = NAN;
         state.device_timeout = NAN;
         state.device_scale = -1;
+        state.use_simpledrm = -1;
 
         ply_progress_load_cache (state.progress,
                                  get_cache_file_for_mode (state.mode));
@@ -2564,6 +2579,9 @@ main (int    argc,
         if (state.device_scale != -1)
                 ply_set_device_scale (state.device_scale);
 
+        if (state.use_simpledrm >= 1)
+                device_manager_flags |= PLY_DEVICE_MANAGER_FLAGS_USE_SIMPLEDRM;
+
         load_devices (&state, device_manager_flags);
 
         ply_trace ("entering event loop");