fbdev: Remove conflicting devices on PCI bus
authorThomas Zimmermann <tzimmermann@suse.de>
Mon, 18 Jul 2022 07:23:17 +0000 (09:23 +0200)
committerThomas Zimmermann <tzimmermann@suse.de>
Tue, 19 Jul 2022 11:19:11 +0000 (13:19 +0200)
Remove firmware devices on the PCI bus, by calling
aperture_remove_conflicting_pci_devices() in the probe function of
each related fbdev driver. iSo far, most of these drivers did not
remove conflicting VESA or EFI devices, or outride failed for
resource conflicts (i.e., matroxfb.) This must have been broken
for quite some time.

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-7-tzimmermann@suse.de
39 files changed:
drivers/video/fbdev/arkfb.c
drivers/video/fbdev/asiliantfb.c
drivers/video/fbdev/aty/aty128fb.c
drivers/video/fbdev/aty/atyfb_base.c
drivers/video/fbdev/carminefb.c
drivers/video/fbdev/chipsfb.c
drivers/video/fbdev/cirrusfb.c
drivers/video/fbdev/cyber2000fb.c
drivers/video/fbdev/geode/gx1fb_core.c
drivers/video/fbdev/geode/gxfb_core.c
drivers/video/fbdev/geode/lxfb_core.c
drivers/video/fbdev/gxt4500.c
drivers/video/fbdev/i740fb.c
drivers/video/fbdev/i810/i810_main.c
drivers/video/fbdev/imsttfb.c
drivers/video/fbdev/intelfb/intelfbdrv.c
drivers/video/fbdev/kyro/fbdev.c
drivers/video/fbdev/matrox/matroxfb_base.c
drivers/video/fbdev/mb862xx/mb862xxfbdrv.c
drivers/video/fbdev/neofb.c
drivers/video/fbdev/nvidia/nvidia.c
drivers/video/fbdev/pm2fb.c
drivers/video/fbdev/pm3fb.c
drivers/video/fbdev/pvr2fb.c
drivers/video/fbdev/riva/fbdev.c
drivers/video/fbdev/s3fb.c
drivers/video/fbdev/savage/savagefb_driver.c
drivers/video/fbdev/sis/sis_main.c
drivers/video/fbdev/skeletonfb.c
drivers/video/fbdev/sm712fb.c
drivers/video/fbdev/sstfb.c
drivers/video/fbdev/sunxvr2500.c
drivers/video/fbdev/sunxvr500.c
drivers/video/fbdev/tdfxfb.c
drivers/video/fbdev/tgafb.c
drivers/video/fbdev/tridentfb.c
drivers/video/fbdev/vermilion/vermilion.c
drivers/video/fbdev/via/via-core.c
drivers/video/fbdev/vt8623fb.c

index eb3e47c58c5f7f8c7e1b4a698577d2938327e314..453daa072f534a214b8090ec20937f8b26378282 100644 (file)
@@ -11,6 +11,7 @@
  *  Code is based on s3fb
  */
 
+#include <linux/aperture.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
@@ -949,6 +950,10 @@ static int ark_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
        int rc;
        u8 regval;
 
+       rc = aperture_remove_conflicting_pci_devices(dev, "arkfb");
+       if (rc < 0)
+               return rc;
+
        /* Ignore secondary VGA device because there is no VGA arbitration */
        if (! svga_primary_device(dev)) {
                dev_info(&(dev->dev), "ignoring secondary device\n");
index f8ef62542f7f590f73c52551f3fbf2248667b3e3..3818437a8f6917e8f17538d04c21270cdbd6aca5 100644 (file)
@@ -29,6 +29,7 @@
  *  more details.
  */
 
+#include <linux/aperture.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
@@ -545,6 +546,10 @@ static int asiliantfb_pci_init(struct pci_dev *dp,
        struct fb_info *p;
        int err;
 
+       err = aperture_remove_conflicting_pci_devices(dp, "asiliantfb");
+       if (err)
+               return err;
+
        if ((dp->resource[0].flags & IORESOURCE_MEM) == 0)
                return -ENODEV;
        addr = pci_resource_start(dp, 0);
index 5cdbbba2a013956d3efe35cec729cb0237e3f396..57e398fe7a81c2ab22d955705bd275f083463f6f 100644 (file)
@@ -47,6 +47,7 @@
  */
 
 
+#include <linux/aperture.h>
 #include <linux/module.h>
 #include <linux/moduleparam.h>
 #include <linux/kernel.h>
@@ -2055,6 +2056,10 @@ static int aty128_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
        void __iomem *bios = NULL;
 #endif
 
+       err = aperture_remove_conflicting_pci_devices(pdev, "aty128fb");
+       if (err)
+               return err;
+
        /* Enable device in PCI config */
        if ((err = pci_enable_device(pdev))) {
                printk(KERN_ERR "aty128fb: Cannot enable PCI device: %d\n",
index a3e6faed7745a4b2c5ab877b152ecce97a777091..4804b6e9f3f4873c4dd2dd1b9d892e95aad64964 100644 (file)
@@ -48,6 +48,7 @@
 
 ******************************************************************************/
 
+#include <linux/aperture.h>
 #include <linux/compat.h>
 #include <linux/module.h>
 #include <linux/moduleparam.h>
@@ -3533,7 +3534,11 @@ static int atyfb_pci_probe(struct pci_dev *pdev,
        struct fb_info *info;
        struct resource *rp;
        struct atyfb_par *par;
-       int rc = -ENOMEM;
+       int rc;
+
+       rc = aperture_remove_conflicting_pci_devices(pdev, "atyfb");
+       if (rc)
+               return rc;
 
        /* Enable device in PCI config */
        if (pci_enable_device(pdev)) {
index 3a1c2e0739a1609103ae93f3050b217556fe5d47..4651b48a87f9396a2de3a986928dc2b0fea4a422 100644 (file)
@@ -7,6 +7,7 @@
  * - FB1 is display 1 with unique memory area
  * - both display use 32 bit colors
  */
+#include <linux/aperture.h>
 #include <linux/delay.h>
 #include <linux/errno.h>
 #include <linux/fb.h>
@@ -614,6 +615,10 @@ static int carminefb_probe(struct pci_dev *dev, const struct pci_device_id *ent)
        struct fb_info *info;
        int ret;
 
+       ret = aperture_remove_conflicting_pci_devices(dev, "carminefb");
+       if (ret)
+               return ret;
+
        ret = pci_enable_device(dev);
        if (ret)
                return ret;
index 618fb6dbbedb9e6e879f1366b8fe3b1e55c99f6f..5ad64714d39eae2b32b09951ddf522aaef722307 100644 (file)
@@ -14,6 +14,7 @@
  *  more details.
  */
 
+#include <linux/aperture.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
@@ -351,7 +352,11 @@ static int chipsfb_pci_init(struct pci_dev *dp, const struct pci_device_id *ent)
        struct fb_info *p;
        unsigned long addr;
        unsigned short cmd;
-       int rc = -ENODEV;
+       int rc;
+
+       rc = aperture_remove_conflicting_pci_devices(dp, "chipsfb");
+       if (rc)
+               return rc;
 
        if (pci_enable_device(dp) < 0) {
                dev_err(&dp->dev, "Cannot enable PCI device\n");
index 51e072c03e1c670bfa7b65f7bf7e70c968a97c03..4ff6f624f912229f659feeea5a2a170e62f184f0 100644 (file)
@@ -34,6 +34,7 @@
  *
  */
 
+#include <linux/aperture.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
@@ -2085,6 +2086,10 @@ static int cirrusfb_pci_register(struct pci_dev *pdev,
        unsigned long board_addr, board_size;
        int ret;
 
+       ret = aperture_remove_conflicting_pci_devices(pdev, "cirrusfb");
+       if (ret)
+               return ret;
+
        ret = pci_enable_device(pdev);
        if (ret < 0) {
                printk(KERN_ERR "cirrusfb: Cannot enable PCI device\n");
index d45355b9a58ca3aae87833054fef2386d7a7da85..be7bcf95c96a5c6dc3b73674720d47262a9f3405 100644 (file)
@@ -33,6 +33,7 @@
  * (which, incidentally, is about the same saving as a 2.5in hard disk
  * entering standby mode.)
  */
+#include <linux/aperture.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
@@ -1720,6 +1721,10 @@ static int cyberpro_pci_probe(struct pci_dev *dev,
 
        sprintf(name, "CyberPro%4X", id->device);
 
+       err = aperture_remove_conflicting_pci_devices(dev, name);
+       if (err)
+               return err;
+
        err = pci_enable_device(dev);
        if (err)
                return err;
index 5d34d89fb665346e0688c380aff0854b0bd4db10..4cac7e3bb1a0cc2445ed3232d233ef6bc363b618 100644 (file)
@@ -6,6 +6,7 @@
  * Copyright (C) 2005 Arcom Control Systems Ltd.
  */
 
+#include <linux/aperture.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
@@ -320,6 +321,10 @@ static int gx1fb_probe(struct pci_dev *pdev, const struct pci_device_id *id)
        struct fb_info *info;
        int ret;
 
+       ret = aperture_remove_conflicting_pci_devices(pdev, "gx1fb");
+       if (ret)
+               return ret;
+
        info = gx1fb_init_fbinfo(&pdev->dev);
        if (!info)
                return -ENOMEM;
index 44089b331f91db542467db2c6fc232f9eeb3e503..2527bd80ec5f537e704742f69f2836bb0d9c512a 100644 (file)
@@ -15,6 +15,7 @@
  *
  * 16 MiB of framebuffer memory is assumed to be available.
  */
+#include <linux/aperture.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
@@ -364,6 +365,10 @@ static int gxfb_probe(struct pci_dev *pdev, const struct pci_device_id *id)
        struct fb_videomode *modedb_ptr;
        unsigned int modedb_size;
 
+       ret = aperture_remove_conflicting_pci_devices(pdev, "gxfb");
+       if (ret)
+               return ret;
+
        info = gxfb_init_fbinfo(&pdev->dev);
        if (!info)
                return -ENOMEM;
index 66c81262d18f873645810dc28dd52efa12314b47..9d26592dbfce9aaf06b54d2cf22f455fc2694b50 100644 (file)
@@ -6,6 +6,7 @@
  * Built from gxfb (which is Copyright (C) 2006 Arcom Control Systems Ltd.)
  */
 
+#include <linux/aperture.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
@@ -484,6 +485,10 @@ static int lxfb_probe(struct pci_dev *pdev, const struct pci_device_id *id)
        struct fb_videomode *modedb_ptr;
        unsigned int modedb_size;
 
+       ret = aperture_remove_conflicting_pci_devices(pdev, "lxfb");
+       if (ret)
+               return ret;
+
        info = lxfb_init_fbinfo(&pdev->dev);
 
        if (info == NULL)
index e5475ae1e1587ef5cf7dbd2d504c4cd21e02a6f4..f0d36a4fdaefd159f6babdfc4d0a52ff169963db 100644 (file)
@@ -6,6 +6,7 @@
  * Copyright (C) 2006 Paul Mackerras, IBM Corp. <paulus@samba.org>
  */
 
+#include <linux/aperture.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/fb.h>
@@ -621,6 +622,10 @@ static int gxt4500_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
        struct fb_var_screeninfo var;
        enum gxt_cards cardtype;
 
+       err = aperture_remove_conflicting_pci_devices(pdev, "gxt4500fb");
+       if (err)
+               return err;
+
        err = pci_enable_device(pdev);
        if (err) {
                dev_err(&pdev->dev, "gxt4500: cannot enable PCI device: %d\n",
index 09dd85553d4f3cf95884eb81851555638162a2a0..23329de28e771460d2e11f773f7d1c783f8a8aa6 100644 (file)
@@ -12,6 +12,7 @@
  *  i740fb by Patrick LERDA, v0.9
  */
 
+#include <linux/aperture.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
@@ -1008,6 +1009,10 @@ static int i740fb_probe(struct pci_dev *dev, const struct pci_device_id *ent)
        bool found = false;
        u8 *edid;
 
+       ret = aperture_remove_conflicting_pci_devices(dev, "i740fb");
+       if (ret)
+               return ret;
+
        info = framebuffer_alloc(sizeof(struct i740fb_par), &(dev->dev));
        if (!info)
                return -ENOMEM;
index 41a86efca5166d194ebb8d51f31c0219944cb5a8..ff09f8c20bfcbaafac8d0a233537b608d8742f11 100644 (file)
@@ -28,6 +28,7 @@
  *  more details.
  */
 
+#include <linux/aperture.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
@@ -2016,6 +2017,10 @@ static int i810fb_init_pci(struct pci_dev *dev,
        struct fb_videomode mode;
        int err = -1, vfreq, hfreq, pixclock;
 
+       err = aperture_remove_conflicting_pci_devices(dev, "i810fb");
+       if (err)
+               return err;
+
        info = framebuffer_alloc(sizeof(struct i810fb_par), &dev->dev);
        if (!info)
                return -ENOMEM;
index f489386855c09eab403beff106a6ff820c81e5f3..d7edb9c5d3a3feb0e176f2e05bd11d45bab10c36 100644 (file)
@@ -16,6 +16,7 @@
  *  more details.
  */
 
+#include <linux/aperture.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
@@ -1469,7 +1470,12 @@ static int imsttfb_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
        struct imstt_par *par;
        struct fb_info *info;
        struct device_node *dp;
-       int ret = -ENOMEM;
+       int ret;
+
+       ret = aperture_remove_conflicting_pci_devices(pdev, "imsttfb");
+       if (ret)
+               return ret;
+       ret = -ENOMEM;
 
        dp = pci_device_to_OF_node(pdev);
        if(dp)
index 5647fca8c49a26612e9e4686b0a3b26919c2eaa8..d4a2891a9a7acee21a3563529198e67961d1436c 100644 (file)
  *              Add support for 945GME. (Phil Endecott <spam_from_intelfb@chezphil.org>)
  */
 
+#include <linux/aperture.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
@@ -483,6 +484,10 @@ static int intelfb_pci_register(struct pci_dev *pdev,
 
        DBG_MSG("intelfb_pci_register\n");
 
+       err = aperture_remove_conflicting_pci_devices(pdev, "intelfb");
+       if (err)
+               return err;
+
        num_registered++;
        if (num_registered != 1) {
                ERR_MSG("Attempted to register %d devices "
index d57772f96ad26718eb01c0ab83dd6f870364c889..b4b93054c5208fa4fda85d8202f54fb87006048b 100644 (file)
@@ -9,6 +9,7 @@
  * for more details.
  */
 
+#include <linux/aperture.h>
 #include <linux/module.h>
 #include <linux/types.h>
 #include <linux/kernel.h>
@@ -676,6 +677,10 @@ static int kyrofb_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
        unsigned long size;
        int err;
 
+       err = aperture_remove_conflicting_pci_devices(pdev, "kyrofb");
+       if (err)
+               return err;
+
        if ((err = pci_enable_device(pdev))) {
                printk(KERN_WARNING "kyrofb: Can't enable pdev: %d\n", err);
                return err;
index 236521b19daf7799f76a219585f827aeba385eaf..3e26346c05a2852beeba6c25027081749e3b97de 100644 (file)
  *
  */
 
+#include <linux/aperture.h>
 #include <linux/version.h>
 
 #include "matroxfb_base.h"
@@ -2044,6 +2045,10 @@ static int matroxfb_probe(struct pci_dev* pdev, const struct pci_device_id* dumm
        u_int32_t cmd;
        DBG(__func__)
 
+       err = aperture_remove_conflicting_pci_devices(pdev, "matroxfb");
+       if (err)
+               return err;
+
        svid = pdev->subsystem_vendor;
        sid = pdev->subsystem_device;
        for (b = dev_list; b->vendor; b++) {
index a7508f5be343a654e615b45b17308ac888047656..96800c9c9cd9ee75783daac06433af9b95b699ae 100644 (file)
@@ -10,6 +10,7 @@
 
 #undef DEBUG
 
+#include <linux/aperture.h>
 #include <linux/fb.h>
 #include <linux/delay.h>
 #include <linux/uaccess.h>
@@ -999,6 +1000,10 @@ static int mb862xx_pci_probe(struct pci_dev *pdev,
        struct device *dev = &pdev->dev;
        int ret;
 
+       ret = aperture_remove_conflicting_pci_devices(pdev, "mb862xxfb");
+       if (ret)
+               return ret;
+
        ret = pci_enable_device(pdev);
        if (ret < 0) {
                dev_err(dev, "Cannot enable PCI device\n");
index 8ad2a79623afe8d90b47af744e683b0d8423ea5c..93a2d2d1abe8f620a57f55e43ec8f3a71dec52ca 100644 (file)
@@ -54,6 +54,7 @@
  *
  */
 
+#include <linux/aperture.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
@@ -2029,6 +2030,10 @@ static int neofb_probe(struct pci_dev *dev, const struct pci_device_id *id)
 
        DBG("neofb_probe");
 
+       err = aperture_remove_conflicting_pci_devices(dev, "neofb");
+       if (err)
+               return err;
+
        err = pci_enable_device(dev);
        if (err)
                return err;
index a372a183c1f0196d6ad74a22a1634ba52aa22edf..329e2e8133c6937095ff75fbf22d60d893828a2d 100644 (file)
@@ -9,6 +9,7 @@
  *
  */
 
+#include <linux/aperture.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
@@ -1276,11 +1277,15 @@ static int nvidiafb_probe(struct pci_dev *pd, const struct pci_device_id *ent)
        struct nvidia_par *par;
        struct fb_info *info;
        unsigned short cmd;
-
+       int ret;
 
        NVTRACE_ENTER();
        assert(pd != NULL);
 
+       ret = aperture_remove_conflicting_pci_devices(pd, "nvidiafb");
+       if (ret)
+               return ret;
+
        info = framebuffer_alloc(sizeof(struct nvidia_par), &pd->dev);
 
        if (!info)
index d3be2c64f1c08dce2b1c10eb0be7ee397e030bff..bc80d8498aeb0b60c70a1cafe343f85966fad02c 100644 (file)
@@ -27,6 +27,7 @@
  *
  */
 
+#include <linux/aperture.h>
 #include <linux/module.h>
 #include <linux/moduleparam.h>
 #include <linux/kernel.h>
@@ -1516,6 +1517,10 @@ static int pm2fb_probe(struct pci_dev *pdev, const struct pci_device_id *id)
        int err;
        int retval = -ENXIO;
 
+       err = aperture_remove_conflicting_pci_devices(pdev, "pm2fb");
+       if (err)
+               return err;
+
        err = pci_enable_device(pdev);
        if (err) {
                printk(KERN_WARNING "pm2fb: Can't enable pdev: %d\n", err);
index a8faf46adeb16083865904d3be0fefdcf11b8078..ba69846d444f532c700b2732ad665e9dfa210b0d 100644 (file)
@@ -22,6 +22,7 @@
  *
  */
 
+#include <linux/aperture.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
@@ -1315,6 +1316,10 @@ static int pm3fb_probe(struct pci_dev *dev, const struct pci_device_id *ent)
        int err;
        int retval = -ENXIO;
 
+       err = aperture_remove_conflicting_pci_devices(dev, "pm3fb");
+       if (err)
+               return err;
+
        err = pci_enable_device(dev);
        if (err) {
                printk(KERN_WARNING "pm3fb: Can't enable PCI dev: %d\n", err);
index f4add36cb5f4d6fa64ecab6184a7f602d8d67da2..b73ad14efa201c0b6d6f648194f712f85c431bde 100644 (file)
@@ -45,6 +45,7 @@
 
 #undef DEBUG
 
+#include <linux/aperture.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
@@ -942,6 +943,10 @@ static int pvr2fb_pci_probe(struct pci_dev *pdev,
 {
        int ret;
 
+       ret = aperture_remove_conflicting_pci_devices(pdev, "pvrfb");
+       if (ret)
+               return ret;
+
        ret = pci_enable_device(pdev);
        if (ret) {
                printk(KERN_ERR "pvr2fb: PCI enable failed\n");
index 5bafc44c591b7042a50892ffee6132ac3849b23a..0ea74e28f9152e528fa42c22b0183e6e4e3e2245 100644 (file)
@@ -29,6 +29,7 @@
  *     doublescan modes are broken
  */
 
+#include <linux/aperture.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
@@ -1898,6 +1899,10 @@ static int rivafb_probe(struct pci_dev *pd, const struct pci_device_id *ent)
        NVTRACE_ENTER();
        assert(pd != NULL);
 
+       ret = aperture_remove_conflicting_pci_devices(pd, "rivafb");
+       if (ret)
+               return ret;
+
        info = framebuffer_alloc(sizeof(struct riva_par), &pd->dev);
        if (!info) {
                ret = -ENOMEM;
index b93c8eb0233692e1c5f096bfa9d7c197227c667d..f66c4de0e188bc336aba30df4e4b49301dc8ec55 100644 (file)
@@ -11,6 +11,7 @@
  * which is based on the code of neofb.
  */
 
+#include <linux/aperture.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
@@ -1129,6 +1130,10 @@ static int s3_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
                return -ENODEV;
        }
 
+       rc = aperture_remove_conflicting_pci_devices(dev, "s3fb");
+       if (rc)
+               return rc;
+
        /* Allocate and fill driver data structure */
        info = framebuffer_alloc(sizeof(struct s3fb_info), &(dev->dev));
        if (!info)
index 8114c921ceb8baa11e39a6546f1813d8a46471a0..b7818b652698f079ba2500fd963bb9c89efbd7ab 100644 (file)
@@ -41,6 +41,7 @@
  *
  */
 
+#include <linux/aperture.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
@@ -2176,6 +2177,10 @@ static int savagefb_probe(struct pci_dev *dev, const struct pci_device_id *id)
 
        DBG("savagefb_probe");
 
+       err = aperture_remove_conflicting_pci_devices(dev, "savagefb");
+       if (err)
+               return err;
+
        info = framebuffer_alloc(sizeof(struct savagefb_par), &dev->dev);
        if (!info)
                return -ENOMEM;
index f28fd69d5eb75919920465ae533ce532633dd7cf..7114c5c17c9121d3ead5516d9fcfa0fc52d9c4cd 100644 (file)
@@ -19,6 +19,7 @@
  * which is (c) 1998 Gerd Knorr <kraxel@goldbach.in-berlin.de>
  */
 
+#include <linux/aperture.h>
 #include <linux/module.h>
 #include <linux/moduleparam.h>
 #include <linux/kernel.h>
@@ -5849,6 +5850,10 @@ static int sisfb_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
        if(sisfb_off)
                return -ENXIO;
 
+       ret = aperture_remove_conflicting_pci_devices(pdev, "sisfb");
+       if (ret)
+               return ret;
+
        sis_fb_info = framebuffer_alloc(sizeof(*ivideo), &pdev->dev);
        if(!sis_fb_info)
                return -ENOMEM;
index 304320ce6c6f0ff7beb6b52c9ad0a50af42710da..125df366e23ad1ee91ad0675188d30f7a40f6c01 100644 (file)
@@ -42,6 +42,7 @@
  *  more details.
  */
 
+#include <linux/aperture.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
@@ -668,6 +669,13 @@ static int xxxfb_probe(struct pci_dev *dev, const struct pci_device_id *ent)
     struct device *device = &dev->dev; /* or &pdev->dev */
     int cmap_len, retval;
 
+    /*
+     * Remove firmware-based drivers that create resource conflicts.
+     */
+    retval = aperture_remove_conflicting_pci_devices(pdev, "xxxfb");
+    if (retval)
+           return retval;
+
     /*
      * Dynamically allocate info and par
      */
index 092a1caa1208e191b016a0ec2097208e5e2d960f..3baf33635e65f8ac6b013c37dd261b7680d38773 100644 (file)
@@ -18,6 +18,7 @@
  * Framebuffer driver for Silicon Motion SM710, SM712, SM721 and SM722 chips
  */
 
+#include <linux/aperture.h>
 #include <linux/io.h>
 #include <linux/fb.h>
 #include <linux/pci.h>
@@ -1502,6 +1503,10 @@ static int smtcfb_pci_probe(struct pci_dev *pdev,
 
        dev_info(&pdev->dev, "Silicon Motion display driver.\n");
 
+       err = aperture_remove_conflicting_pci_devices(pdev, "smtcfb");
+       if (err)
+               return err;
+
        err = pci_enable_device(pdev);  /* enable SMTC chip */
        if (err)
                return err;
index 535ef4693cd4aeb0aafcc6fa00948f549e1d0b8e..73ca2782ebfc8c534067a30dfd27fbf09eb544f0 100644 (file)
@@ -80,6 +80,7 @@
  * Includes
  */
 
+#include <linux/aperture.h>
 #include <linux/string.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
@@ -1326,6 +1327,10 @@ static int sstfb_probe(struct pci_dev *pdev, const struct pci_device_id *id)
        struct sst_spec *spec;
        int err;
 
+       err = aperture_remove_conflicting_pci_devices(pdev, "sstfb");
+       if (err)
+               return err;
+
        /* Enable device in PCI config. */
        if ((err=pci_enable_device(pdev))) {
                printk(KERN_ERR "cannot enable device\n");
index 1d3bacd9d5acd80f916829b5a83970b1fd8993aa..81d59613ea1f67ae66cca76cef16f62af7c84dd9 100644 (file)
@@ -5,6 +5,7 @@
  * Copyright (C) 2007 David S. Miller (davem@davemloft.net)
  */
 
+#include <linux/aperture.h>
 #include <linux/kernel.h>
 #include <linux/fb.h>
 #include <linux/pci.h>
@@ -123,6 +124,10 @@ static int s3d_pci_register(struct pci_dev *pdev,
        struct s3d_info *sp;
        int err;
 
+       err = aperture_remove_conflicting_pci_devices(pdev, "s3dfb");
+       if (err)
+               return err;
+
        err = pci_enable_device(pdev);
        if (err < 0) {
                printk(KERN_ERR "s3d: Cannot enable PCI device %s\n",
index 9daf17b111065761d456f1b0dca70ff4618eeff4..3a51b2a1480c1fd9eebfd4f034b1b69cabe90cfb 100644 (file)
@@ -5,6 +5,7 @@
  * Copyright (C) 2007 David S. Miller (davem@davemloft.net)
  */
 
+#include <linux/aperture.h>
 #include <linux/kernel.h>
 #include <linux/fb.h>
 #include <linux/pci.h>
@@ -249,6 +250,10 @@ static int e3d_pci_register(struct pci_dev *pdev,
        unsigned int line_length;
        int err;
 
+       err = aperture_remove_conflicting_pci_devices(pdev, "e3dfb");
+       if (err)
+               return err;
+
        of_node = pci_device_to_OF_node(pdev);
        if (!of_node) {
                printk(KERN_ERR "e3d: Cannot find OF node of %s\n",
index 67e37a62b07c3fec02ac9b4518453d87c2ef746f..059e0174e139757260fbe3b807545ea2bd724aff 100644 (file)
@@ -64,6 +64,7 @@
  *
  */
 
+#include <linux/aperture.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
@@ -1376,6 +1377,10 @@ static int tdfxfb_probe(struct pci_dev *pdev, const struct pci_device_id *id)
        struct fb_monspecs *specs;
        bool found;
 
+       err = aperture_remove_conflicting_pci_devices(pdev, "tdfxfb");
+       if (err)
+               return err;
+
        err = pci_enable_device(pdev);
        if (err) {
                printk(KERN_ERR "tdfxfb: Can't enable pdev: %d\n", err);
index 9266c76783ccfd6b01e0e5ab8d3169b5a75ecee7..4600138e3bef9f88c9a49cf9ef9f82afe68f45b4 100644 (file)
@@ -12,6 +12,7 @@
  *  more details.
  */
 
+#include <linux/aperture.h>
 #include <linux/bitrev.h>
 #include <linux/compiler.h>
 #include <linux/delay.h>
@@ -106,6 +107,12 @@ static struct pci_driver tgafb_pci_driver = {
 static int tgafb_pci_register(struct pci_dev *pdev,
                              const struct pci_device_id *ent)
 {
+       int ret;
+
+       ret = aperture_remove_conflicting_pci_devices(pdev, "tgafb");
+       if (ret)
+               return ret;
+
        return tgafb_register(&pdev->dev);
 }
 
index 319131bd72cffa11a965f69588102012942d40fd..6813df793c494c9753b94446f908739a9e0d3bf6 100644 (file)
@@ -16,6 +16,7 @@
  *     timing value tweaking so it looks good on every monitor in every mode
  */
 
+#include <linux/aperture.h>
 #include <linux/module.h>
 #include <linux/fb.h>
 #include <linux/init.h>
@@ -1470,6 +1471,10 @@ static int trident_pci_probe(struct pci_dev *dev,
        int chip_id;
        bool found = false;
 
+       err = aperture_remove_conflicting_pci_devices(dev, "tridentfb");
+       if (err)
+               return err;
+
        err = pci_enable_device(dev);
        if (err)
                return err;
index ff61605b8764fc7262fd90d85f6360c93276d374..82b36dbb5b1a93b223419ae4465383a4d0f938da 100644 (file)
@@ -14,6 +14,7 @@
  *   Alan Hourihane <alanh-at-tungstengraphics-dot-com>
  */
 
+#include <linux/aperture.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
@@ -442,7 +443,11 @@ static int vml_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
        struct vml_info *vinfo;
        struct fb_info *info;
        struct vml_par *par;
-       int err = 0;
+       int err;
+
+       err = aperture_remove_conflicting_pci_devices(dev, "vmlfb");
+       if (err)
+               return err;
 
        par = kzalloc(sizeof(*par), GFP_KERNEL);
        if (par == NULL)
index 89d75079b73071be5ddf876be6db07f21c4cfed3..2ee8fcae08dfbbf3fe1dac69643ed0dc1ee88940 100644 (file)
@@ -8,6 +8,7 @@
 /*
  * Core code for the Via multifunction framebuffer device.
  */
+#include <linux/aperture.h>
 #include <linux/via-core.h>
 #include <linux/via_i2c.h>
 #include <linux/via-gpio.h>
@@ -617,6 +618,10 @@ static int via_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 {
        int ret;
 
+       ret = aperture_remove_conflicting_pci_devices(pdev, "viafb");
+       if (ret)
+               return ret;
+
        ret = pci_enable_device(pdev);
        if (ret)
                return ret;
index a92a8c670cf0f28ffda9c391578bd5d51ba69ee0..62318cef5f8c4452d86f06edec90592f67824999 100644 (file)
@@ -12,6 +12,7 @@
  * (http://davesdomain.org.uk/viafb/)
  */
 
+#include <linux/aperture.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
@@ -670,6 +671,10 @@ static int vt8623_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
                return -ENODEV;
        }
 
+       rc = aperture_remove_conflicting_pci_devices(dev, "vt8623fb");
+       if (rc)
+               return rc;
+
        /* Allocate and fill driver data structure */
        info = framebuffer_alloc(sizeof(struct vt8623fb_info), &(dev->dev));
        if (!info)