video/aperture: Remove conflicting VGA devices, if any
authorThomas Zimmermann <tzimmermann@suse.de>
Mon, 18 Jul 2022 07:23:20 +0000 (09:23 +0200)
committerThomas Zimmermann <tzimmermann@suse.de>
Tue, 19 Jul 2022 11:19:11 +0000 (13:19 +0200)
On the primary graphics adapter, a driver might conflict with a VGA
driver that controls the VGA framebuffer I/O range. Remove the VGA
driver from the aperture helpers. Until now, this case has been
hendled by fbdev, but it should work even with fbdev disabled.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220718072322.8927-10-tzimmermann@suse.de
drivers/video/aperture.c

index 101e13c..abc6912 100644 (file)
@@ -12,6 +12,8 @@
 #include <linux/types.h>
 #include <linux/vgaarb.h>
 
+#include <video/vga.h>
+
 /**
  * DOC: overview
  *
@@ -300,6 +302,16 @@ int aperture_remove_conflicting_devices(resource_size_t base, resource_size_t si
         */
        sysfb_disable();
 
+       aperture_detach_devices(base, size);
+
+       /*
+        * If this is the primary adapter, there could be a VGA device
+        * that consumes the VGA framebuffer I/O range. Remove this device
+        * as well.
+        */
+       if (primary)
+               aperture_detach_devices(VGA_FB_PHYS_BASE, VGA_FB_PHYS_SIZE);
+
 #if IS_REACHABLE(CONFIG_FB)
        a = alloc_apertures(1);
        if (!a)
@@ -315,8 +327,6 @@ int aperture_remove_conflicting_devices(resource_size_t base, resource_size_t si
                return ret;
 #endif
 
-       aperture_detach_devices(base, size);
-
        return 0;
 }
 EXPORT_SYMBOL(aperture_remove_conflicting_devices);