diff options
Diffstat (limited to 'drm-cirrus-qemu-fix-crash.patch')
-rw-r--r-- | drm-cirrus-qemu-fix-crash.patch | 101 |
1 files changed, 0 insertions, 101 deletions
diff --git a/drm-cirrus-qemu-fix-crash.patch b/drm-cirrus-qemu-fix-crash.patch deleted file mode 100644 index be6f13509..000000000 --- a/drm-cirrus-qemu-fix-crash.patch +++ /dev/null @@ -1,101 +0,0 @@ -diff --git a/drivers/gpu/drm/cirrus/cirrus_drv.c b/drivers/gpu/drm/cirrus/cirrus_drv.c -index d703823..7053140 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); - } - -diff --git a/drivers/gpu/drm/cirrus/cirrus_drv.h b/drivers/gpu/drm/cirrus/cirrus_drv.h -index 21bdfa8..64ea597 100644 ---- a/drivers/gpu/drm/cirrus/cirrus_drv.h -+++ b/drivers/gpu/drm/cirrus/cirrus_drv.h -@@ -145,7 +145,7 @@ struct cirrus_device { - struct ttm_bo_device bdev; - atomic_t validate_sequence; - } ttm; -- -+ bool mm_inited; - }; - - -diff --git a/drivers/gpu/drm/cirrus/cirrus_ttm.c b/drivers/gpu/drm/cirrus/cirrus_ttm.c -index 2ebcd11..50e170f 100644 ---- a/drivers/gpu/drm/cirrus/cirrus_ttm.c -+++ b/drivers/gpu/drm/cirrus/cirrus_ttm.c -@@ -275,12 +275,17 @@ int cirrus_mm_init(struct cirrus_device *cirrus) - pci_resource_len(dev->pdev, 0), - DRM_MTRR_WC); - -+ cirrus->mm_inited = true; - return 0; - } - - void cirrus_mm_fini(struct cirrus_device *cirrus) - { - struct drm_device *dev = cirrus->dev; -+ -+ if (!cirrus->mm_inited) -+ return; -+ - ttm_bo_device_release(&cirrus->ttm.bdev); - - cirrus_ttm_global_release(cirrus); -diff --git a/drivers/gpu/drm/mgag200/mgag200_drv.c b/drivers/gpu/drm/mgag200/mgag200_drv.c -index 3c8e04f..93e832d 100644 ---- a/drivers/gpu/drm/mgag200/mgag200_drv.c -+++ b/drivers/gpu/drm/mgag200/mgag200_drv.c -@@ -41,9 +41,28 @@ static DEFINE_PCI_DEVICE_TABLE(pciidlist) = { - - MODULE_DEVICE_TABLE(pci, pciidlist); - -+static void mgag200_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, "mgag200drmfb", primary); -+ kfree(ap); -+} -+ -+ - static int __devinit - mga_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) - { -+ mgag200_kick_out_firmware_fb(pdev); -+ - return drm_get_pci_dev(pdev, ent, &driver); - } - |