aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2012-06-01 11:11:09 +0100
committerDave Airlie <airlied@redhat.com>2012-06-01 11:11:09 +0100
commitdedc14e2a6e85b357c2274e03af354201e0b5626 (patch)
treee69f5d04d989c2d4b760a1a12ee966f9b65560cb
parentcirrus: avoid crash if driver fails to load (diff)
downloadlinux-dev-dedc14e2a6e85b357c2274e03af354201e0b5626.tar.xz
linux-dev-dedc14e2a6e85b357c2274e03af354201e0b5626.zip
drm/cirrus: kick out conflicting framebuffers earlier
It appears that grub2 will pass framebuffer info via EFI, this causes the vram reserve to fail, so kick out efifb earlier before cirrus loads. Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=826983 Signed-off-by: Dave Airlie <airlied@redhat.com>
-rw-r--r--drivers/gpu/drm/cirrus/cirrus_drv.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/drivers/gpu/drm/cirrus/cirrus_drv.c b/drivers/gpu/drm/cirrus/cirrus_drv.c
index d7038230b71e..7053140c6596 100644
--- a/drivers/gpu/drm/cirrus/cirrus_drv.c
+++ b/drivers/gpu/drm/cirrus/cirrus_drv.c
@@ -35,9 +35,28 @@ static DEFINE_PCI_DEVICE_TABLE(pciidlist) = {
{0,}
};
+
+static void cirrus_kick_out_firmware_fb(struct pci_dev *pdev)
+{
+ struct apertures_struct *ap;
+ bool primary = false;
+
+ ap = alloc_apertures(1);
+ ap->ranges[0].base = pci_resource_start(pdev, 0);
+ ap->ranges[0].size = pci_resource_len(pdev, 0);
+
+#ifdef CONFIG_X86
+ primary = pdev->resource[PCI_ROM_RESOURCE].flags & IORESOURCE_ROM_SHADOW;
+#endif
+ remove_conflicting_framebuffers(ap, "cirrusdrmfb", primary);
+ kfree(ap);
+}
+
static int __devinit
cirrus_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
{
+ cirrus_kick_out_firmware_fb(pdev);
+
return drm_get_pci_dev(pdev, ent, &driver);
}