|
@@ -1401,6 +1401,27 @@ i915_mtrr_setup(struct drm_i915_private *dev_priv, unsigned long base,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+static void i915_kick_out_firmware_fb(struct drm_i915_private *dev_priv)
|
|
|
+{
|
|
|
+ struct apertures_struct *ap;
|
|
|
+ struct pci_dev *pdev = dev_priv->dev->pdev;
|
|
|
+ bool primary;
|
|
|
+
|
|
|
+ ap = alloc_apertures(1);
|
|
|
+ if (!ap)
|
|
|
+ return;
|
|
|
+
|
|
|
+ ap->ranges[0].base = dev_priv->dev->agp->base;
|
|
|
+ ap->ranges[0].size =
|
|
|
+ dev_priv->mm.gtt->gtt_mappable_entries << PAGE_SHIFT;
|
|
|
+ primary =
|
|
|
+ pdev->resource[PCI_ROM_RESOURCE].flags & IORESOURCE_ROM_SHADOW;
|
|
|
+
|
|
|
+ remove_conflicting_framebuffers(ap, "inteldrmfb", primary);
|
|
|
+
|
|
|
+ kfree(ap);
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* i915_driver_load - setup chip and create an initial config
|
|
|
* @dev: DRM device
|
|
@@ -1446,6 +1467,15 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
|
|
|
goto free_priv;
|
|
|
}
|
|
|
|
|
|
+ dev_priv->mm.gtt = intel_gtt_get();
|
|
|
+ if (!dev_priv->mm.gtt) {
|
|
|
+ DRM_ERROR("Failed to initialize GTT\n");
|
|
|
+ ret = -ENODEV;
|
|
|
+ goto put_bridge;
|
|
|
+ }
|
|
|
+
|
|
|
+ i915_kick_out_firmware_fb(dev_priv);
|
|
|
+
|
|
|
pci_set_master(dev->pdev);
|
|
|
|
|
|
/* overlay on gen2 is broken and can't address above 1G */
|
|
@@ -1471,13 +1501,6 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
|
|
|
goto put_bridge;
|
|
|
}
|
|
|
|
|
|
- dev_priv->mm.gtt = intel_gtt_get();
|
|
|
- if (!dev_priv->mm.gtt) {
|
|
|
- DRM_ERROR("Failed to initialize GTT\n");
|
|
|
- ret = -ENODEV;
|
|
|
- goto out_rmmap;
|
|
|
- }
|
|
|
-
|
|
|
aperture_size = dev_priv->mm.gtt->gtt_mappable_entries << PAGE_SHIFT;
|
|
|
|
|
|
dev_priv->mm.gtt_mapping =
|