diff options
| -rw-r--r-- | drivers/gpu/drm/i915/i915_dma.c | 37 |
1 files changed, 30 insertions, 7 deletions
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c index f94792626b94..36822b924eb1 100644 --- a/drivers/gpu/drm/i915/i915_dma.c +++ b/drivers/gpu/drm/i915/i915_dma.c | |||
| @@ -1401,6 +1401,27 @@ i915_mtrr_setup(struct drm_i915_private *dev_priv, unsigned long base, | |||
| 1401 | } | 1401 | } |
| 1402 | } | 1402 | } |
| 1403 | 1403 | ||
| 1404 | static void i915_kick_out_firmware_fb(struct drm_i915_private *dev_priv) | ||
| 1405 | { | ||
| 1406 | struct apertures_struct *ap; | ||
| 1407 | struct pci_dev *pdev = dev_priv->dev->pdev; | ||
| 1408 | bool primary; | ||
| 1409 | |||
| 1410 | ap = alloc_apertures(1); | ||
| 1411 | if (!ap) | ||
| 1412 | return; | ||
| 1413 | |||
| 1414 | ap->ranges[0].base = dev_priv->dev->agp->base; | ||
| 1415 | ap->ranges[0].size = | ||
| 1416 | dev_priv->mm.gtt->gtt_mappable_entries << PAGE_SHIFT; | ||
| 1417 | primary = | ||
| 1418 | pdev->resource[PCI_ROM_RESOURCE].flags & IORESOURCE_ROM_SHADOW; | ||
| 1419 | |||
| 1420 | remove_conflicting_framebuffers(ap, "inteldrmfb", primary); | ||
| 1421 | |||
| 1422 | kfree(ap); | ||
| 1423 | } | ||
| 1424 | |||
| 1404 | /** | 1425 | /** |
| 1405 | * i915_driver_load - setup chip and create an initial config | 1426 | * i915_driver_load - setup chip and create an initial config |
| 1406 | * @dev: DRM device | 1427 | * @dev: DRM device |
| @@ -1446,6 +1467,15 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags) | |||
| 1446 | goto free_priv; | 1467 | goto free_priv; |
| 1447 | } | 1468 | } |
| 1448 | 1469 | ||
| 1470 | dev_priv->mm.gtt = intel_gtt_get(); | ||
| 1471 | if (!dev_priv->mm.gtt) { | ||
| 1472 | DRM_ERROR("Failed to initialize GTT\n"); | ||
| 1473 | ret = -ENODEV; | ||
| 1474 | goto put_bridge; | ||
| 1475 | } | ||
| 1476 | |||
| 1477 | i915_kick_out_firmware_fb(dev_priv); | ||
| 1478 | |||
| 1449 | pci_set_master(dev->pdev); | 1479 | pci_set_master(dev->pdev); |
| 1450 | 1480 | ||
| 1451 | /* overlay on gen2 is broken and can't address above 1G */ | 1481 | /* 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) | |||
| 1471 | goto put_bridge; | 1501 | goto put_bridge; |
| 1472 | } | 1502 | } |
| 1473 | 1503 | ||
| 1474 | dev_priv->mm.gtt = intel_gtt_get(); | ||
| 1475 | if (!dev_priv->mm.gtt) { | ||
| 1476 | DRM_ERROR("Failed to initialize GTT\n"); | ||
| 1477 | ret = -ENODEV; | ||
| 1478 | goto out_rmmap; | ||
| 1479 | } | ||
| 1480 | |||
| 1481 | aperture_size = dev_priv->mm.gtt->gtt_mappable_entries << PAGE_SHIFT; | 1504 | aperture_size = dev_priv->mm.gtt->gtt_mappable_entries << PAGE_SHIFT; |
| 1482 | 1505 | ||
| 1483 | dev_priv->mm.gtt_mapping = | 1506 | dev_priv->mm.gtt_mapping = |
