plymouth/plymouth-only_use_fb_for_cirrus_bochs.patch
Cliff Zhao f04ba846fe Accepting request 1008570 from home:qzhao:branches:Base:System
Update to version 22.02.122+77.c09c651: * ply-device-manager: Move verify_drm_device() higher up in the file. * ply-device-manager: Also ignore SimpleDRM devs in coldplug enumeration path. * Rebase plymouth-only_use_fb_for_cirrus_bochs.patch.

OBS-URL: https://build.opensuse.org/request/show/1008570
OBS-URL: https://build.opensuse.org/package/show/Base:System/plymouth?expand=0&rev=352
2022-10-06 16:42:05 +00:00

54 lines
3.1 KiB
Diff

From: Fabian Vogt <fvogt@suse.com>
Subject: force fb for cirrus and bochs, force drm otherwise
References: bsc#888590, bsc#980750
DRM does not work well with cirrus and bochs (no display) but the framebuffer driver
prevents DRM drivers from loading.
As we need to support cirrus for libvirt and bochs for QEMU, we cannot just remove support for frame-buffer.
Index: plymouth-0.9.3+git20180807.7663b0c/src/libply-splash-core/ply-device-manager.c
===================================================================
diff -Nura plymouth-22.02.122+77.c09c651/src/libply-splash-core/ply-device-manager.c plymouth-22.02.122+77.c09c651_new/src/libply-splash-core/ply-device-manager.c
--- plymouth-22.02.122+77.c09c651/src/libply-splash-core/ply-device-manager.c 2022-10-06 07:38:29.000000000 +0800
+++ plymouth-22.02.122+77.c09c651_new/src/libply-splash-core/ply-device-manager.c 2022-10-07 00:22:51.532816241 +0800
@@ -312,6 +312,18 @@
subsystem = udev_device_get_subsystem (device);
ply_trace ("device subsystem is %s", subsystem);
+ const char *card_vendor = udev_device_get_sysattr_value (device, "device/vendor");
+ const char *card_device = udev_device_get_sysattr_value (device, "device/device");
+ bool use_fb = false;
+ if (card_vendor) {
+ /* Cirrus */
+ if (strcmp ("0x1013", card_vendor) == 0)
+ use_fb = true;
+ /* "Technical Corp", also used by bochs */
+ else if (strcmp ("0x1234", card_vendor) == 0)
+ use_fb = strcmp("0x1111", card_device) == 0;
+ }
+
if (strcmp (subsystem, SUBSYSTEM_DRM) == 0) {
if (!manager->device_timeout_elapsed && !verify_drm_device (device)) {
ply_trace ("ignoring since we only handle SimpleDRM devices after timeout");
@@ -319,10 +331,18 @@
}
ply_trace ("found DRM device %s", device_path);
renderer_type = PLY_RENDERER_TYPE_DRM;
+ if (use_fb) {
+ ply_trace ("forcing use of framebuffer for cirrusdrmfb");
+ renderer_type = PLY_RENDERER_TYPE_NONE;
+ }
} else if (strcmp (subsystem, SUBSYSTEM_FRAME_BUFFER) == 0) {
ply_trace ("found frame buffer device %s", device_path);
- if (!fb_device_has_drm_device (manager, device))
+ if (use_fb) {
renderer_type = PLY_RENDERER_TYPE_FRAME_BUFFER;
+ }
+ else if (!fb_device_has_drm_device (manager, device)) {
+ ply_trace ("avoiding use of framebuffer to not block DRM drivers from working");
+ }
else
ply_trace ("ignoring, since there's a DRM device associated with it");
}