Blame 0001-fix-drm-add-privacy-screen-modules-to-the-initrd.patch

Hans de Goede 76eb28
From 4f1d387b777425aead44232bd2c3d5c3517d4ff8 Mon Sep 17 00:00:00 2001
Hans de Goede 76eb28
From: Hans de Goede <hdegoede@redhat.com>
Hans de Goede 76eb28
Date: Thu, 9 Dec 2021 16:35:11 +0100
Hans de Goede 76eb28
Subject: [PATCH] fix(drm): add privacy screen modules to the initrd
Hans de Goede 76eb28
Hans de Goede 76eb28
Starting with kernel 5.17 the kernel supports the builtin privacy screens
Hans de Goede 76eb28
built into the LCD panel of some new laptop models.
Hans de Goede 76eb28
Hans de Goede 76eb28
This means that the drm drivers will now return -EPROBE_DEFER from their
Hans de Goede 76eb28
probe() method on models with a builtin privacy screen when the privacy
Hans de Goede 76eb28
screen provider driver has not been loaded yet.
Hans de Goede 76eb28
Hans de Goede 76eb28
Make dracut add the privacy screen providing drivers to the initrd
Hans de Goede 76eb28
(when necessary for hostmode=yes), so that drm drivers on affected
Hans de Goede 76eb28
drivers can probe() successfully.
Hans de Goede 76eb28
Hans de Goede 76eb28
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Hans de Goede 76eb28
---
Hans de Goede 76eb28
 modules.d/50drm/module-setup.sh | 14 ++++++++++++++
Hans de Goede 76eb28
 1 file changed, 14 insertions(+)
Hans de Goede 76eb28
Hans de Goede 76eb28
diff --git a/modules.d/50drm/module-setup.sh b/modules.d/50drm/module-setup.sh
Hans de Goede 76eb28
index aca01505..cff0550c 100755
Hans de Goede 76eb28
--- a/modules.d/50drm/module-setup.sh
Hans de Goede 76eb28
+++ b/modules.d/50drm/module-setup.sh
Hans de Goede 76eb28
@@ -29,6 +29,8 @@ installkernel() {
Hans de Goede 76eb28
     # as we could e.g. be in the installer; nokmsboot boot parameter will disable
Hans de Goede 76eb28
     # loading of the driver if needed
Hans de Goede 76eb28
     if [[ $hostonly ]]; then
Hans de Goede 76eb28
+        local i modlink modname
Hans de Goede 76eb28
+
Hans de Goede 76eb28
         for i in /sys/bus/{pci/devices,platform/devices,virtio/devices,soc/devices/soc?}/*/modalias; do
Hans de Goede 76eb28
             [[ -e $i ]] || continue
Hans de Goede 76eb28
             [[ -n $(< "$i") ]] || continue
Hans de Goede 76eb28
@@ -39,7 +41,19 @@ installkernel() {
Hans de Goede 76eb28
                 fi
Hans de Goede 76eb28
             fi
Hans de Goede 76eb28
         done
Hans de Goede 76eb28
+        # if there is a privacy screen then its driver must be loaded before the
Hans de Goede 76eb28
+        # kms driver will bind, otherwise its probe() will return -EPROBE_DEFER
Hans de Goede 76eb28
+        # note privacy screens always register, even with e.g. nokmsboot
Hans de Goede 76eb28
+        for i in /sys/class/drm/privacy_screen-*/device/driver/module; do
Hans de Goede 76eb28
+            [[ -L $i ]] || continue
Hans de Goede 76eb28
+            modlink=$(readlink "$i")
Hans de Goede 76eb28
+            modname=$(basename "$modlink")
Hans de Goede 76eb28
+            instmods "$modname"
Hans de Goede 76eb28
+        done
Hans de Goede 76eb28
     else
Hans de Goede 76eb28
         dracut_instmods -o -s "drm_crtc_init|drm_dev_register|drm_encoder_init" "=drivers/gpu/drm" "=drivers/staging"
Hans de Goede 76eb28
+        # also include privacy screen providers (see above comment)
Hans de Goede 76eb28
+        # atm all providers live under drivers/platform/x86
Hans de Goede 76eb28
+        dracut_instmods -o -s "drm_privacy_screen_register" "=drivers/platform/x86"
Hans de Goede 76eb28
     fi
Hans de Goede 76eb28
 }
Hans de Goede 76eb28
-- 
Hans de Goede 76eb28
2.33.1
Hans de Goede 76eb28