summaryrefslogtreecommitdiff
path: root/hwdb.d
diff options
context:
space:
mode:
authorFranck Bui <fbui@suse.com>2021-07-01 12:30:29 +0200
committerFranck Bui <fbui@suse.com>2021-07-05 11:56:06 +0200
commitc0b2e69f8815881d51b68b4f73e6c7f8cc2417a1 (patch)
tree8cf50d4451bafb10714295aba181071e6b6fba55 /hwdb.d
parent2f15b35352007a7c7a3b58621c199b705571b2cd (diff)
downloadsystemd-c0b2e69f8815881d51b68b4f73e6c7f8cc2417a1.tar.gz
login: XGI Z7/Z9 (XG20 core) graphic chip requires master-of-seat to be set
This graphic chip doesn't have a DRM driver and fall back to vesa-framebuffer driver. Without this patch, users of such chip suddenly see their GUI broken without any indication or reason of what happened (no error message). Hence this regression is near to impossible to troubleshoot for end users. Such case was reported https://bugzilla.opensuse.org/show_bug.cgi?id=1187154. Rather than adding another exception in the udev rules to deal with such HWs, they instead get their own hwdb file '60-seat.hwdb'.
Diffstat (limited to 'hwdb.d')
-rw-r--r--hwdb.d/60-seat.hwdb20
-rw-r--r--hwdb.d/meson.build1
-rwxr-xr-xhwdb.d/parse_hwdb.py2
3 files changed, 23 insertions, 0 deletions
diff --git a/hwdb.d/60-seat.hwdb b/hwdb.d/60-seat.hwdb
new file mode 100644
index 0000000000..d280040c8a
--- /dev/null
+++ b/hwdb.d/60-seat.hwdb
@@ -0,0 +1,20 @@
+# This file is part of systemd.
+#
+# This file lists graphic devices that don't have a DRM driver and fall back to
+# a frame-buffer one instead. Since commit 6260d28b8a, frame-buffer devices are
+# no more considered as graphical capable.
+#
+# The matches have the 'fb' prefix to make sure that only the framebuffer
+# device, and not the (parent) PCI device, is tagged with 'master-of-seat'.
+#
+# Allowed properties are:
+# ID_TAG_MASTER_OF_SEAT=1
+
+#########################################
+# eXtreme Graphic Innovation (XGI)
+#########################################
+
+# Z7/Z9 (XG20 core), a rather ancient graphic chip, doesn't have a DRM driver
+# and falls back to vesafb.
+fb:pci:v000018CAd00000020*
+ ID_TAG_MASTER_OF_SEAT=1
diff --git a/hwdb.d/meson.build b/hwdb.d/meson.build
index fd8c15a521..0a96b5553a 100644
--- a/hwdb.d/meson.build
+++ b/hwdb.d/meson.build
@@ -25,6 +25,7 @@ hwdb_files_test = files('''
60-evdev.hwdb
60-input-id.hwdb
60-keyboard.hwdb
+ 60-seat.hwdb
60-sensor.hwdb
70-joystick.hwdb
70-mouse.hwdb
diff --git a/hwdb.d/parse_hwdb.py b/hwdb.d/parse_hwdb.py
index 6d88766f0b..3cd4b486a6 100755
--- a/hwdb.d/parse_hwdb.py
+++ b/hwdb.d/parse_hwdb.py
@@ -67,6 +67,7 @@ UDEV_TAG = Word(string.ascii_uppercase, alphanums + '_')
# Those patterns are used in type-specific matches
TYPES = {'mouse': ('usb', 'bluetooth', 'ps2', '*'),
'evdev': ('name', 'atkbd', 'input'),
+ 'fb': ('pci'),
'id-input': ('modalias'),
'touchpad': ('i8042', 'rmi', 'bluetooth', 'usb'),
'joystick': ('i8042', 'rmi', 'bluetooth', 'usb'),
@@ -163,6 +164,7 @@ def property_grammar():
('IEEE1394_UNIT_FUNCTION_VIDEO', Or((Literal('0'), Literal('1')))),
('ID_VENDOR_FROM_DATABASE', name_literal),
('ID_MODEL_FROM_DATABASE', name_literal),
+ ('ID_TAG_MASTER_OF_SEAT', Literal('1')),
)
fixed_props = [Literal(name)('NAME') - Suppress('=') - val('VALUE')
for name, val in props]