aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/i915_dma.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/i915/i915_dma.c')
-rw-r--r--drivers/gpu/drm/i915/i915_dma.c41
1 files changed, 19 insertions, 22 deletions
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
index b3873c945d1b..437886641d90 100644
--- a/drivers/gpu/drm/i915/i915_dma.c
+++ b/drivers/gpu/drm/i915/i915_dma.c
@@ -1416,6 +1416,7 @@ void i915_master_destroy(struct drm_device *dev, struct drm_master *master)
1416 master->driver_priv = NULL; 1416 master->driver_priv = NULL;
1417} 1417}
1418 1418
1419#ifdef CONFIG_DRM_I915_FBDEV
1419static void i915_kick_out_firmware_fb(struct drm_i915_private *dev_priv) 1420static void i915_kick_out_firmware_fb(struct drm_i915_private *dev_priv)
1420{ 1421{
1421 struct apertures_struct *ap; 1422 struct apertures_struct *ap;
@@ -1436,6 +1437,11 @@ static void i915_kick_out_firmware_fb(struct drm_i915_private *dev_priv)
1436 1437
1437 kfree(ap); 1438 kfree(ap);
1438} 1439}
1440#else
1441static void i915_kick_out_firmware_fb(struct drm_i915_private *dev_priv)
1442{
1443}
1444#endif
1439 1445
1440static void i915_dump_device_info(struct drm_i915_private *dev_priv) 1446static void i915_dump_device_info(struct drm_i915_private *dev_priv)
1441{ 1447{
@@ -1477,8 +1483,11 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
1477 info = (struct intel_device_info *) flags; 1483 info = (struct intel_device_info *) flags;
1478 1484
1479 /* Refuse to load on gen6+ without kms enabled. */ 1485 /* Refuse to load on gen6+ without kms enabled. */
1480 if (info->gen >= 6 && !drm_core_check_feature(dev, DRIVER_MODESET)) 1486 if (info->gen >= 6 && !drm_core_check_feature(dev, DRIVER_MODESET)) {
1487 DRM_INFO("Your hardware requires kernel modesetting (KMS)\n");
1488 DRM_INFO("See CONFIG_DRM_I915_KMS, nomodeset, and i915.modeset parameters\n");
1481 return -ENODEV; 1489 return -ENODEV;
1490 }
1482 1491
1483 dev_priv = kzalloc(sizeof(*dev_priv), GFP_KERNEL); 1492 dev_priv = kzalloc(sizeof(*dev_priv), GFP_KERNEL);
1484 if (dev_priv == NULL) 1493 if (dev_priv == NULL)
@@ -1505,6 +1514,8 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
1505 dev_priv->pc8.disable_count = 2; /* requirements_met + gpu_idle */ 1514 dev_priv->pc8.disable_count = 2; /* requirements_met + gpu_idle */
1506 INIT_DELAYED_WORK(&dev_priv->pc8.enable_work, hsw_enable_pc8_work); 1515 INIT_DELAYED_WORK(&dev_priv->pc8.enable_work, hsw_enable_pc8_work);
1507 1516
1517 intel_display_crc_init(dev);
1518
1508 i915_dump_device_info(dev_priv); 1519 i915_dump_device_info(dev_priv);
1509 1520
1510 /* Not all pre-production machines fall into this category, only the 1521 /* Not all pre-production machines fall into this category, only the
@@ -1542,15 +1553,10 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
1542 1553
1543 intel_uncore_early_sanitize(dev); 1554 intel_uncore_early_sanitize(dev);
1544 1555
1545 if (IS_HASWELL(dev) && (I915_READ(HSW_EDRAM_PRESENT) == 1)) { 1556 /* This must be called before any calls to HAS_PCH_* */
1546 /* The docs do not explain exactly how the calculation can be 1557 intel_detect_pch(dev);
1547 * made. It is somewhat guessable, but for now, it's always 1558
1548 * 128MB. 1559 intel_uncore_init(dev);
1549 * NB: We can't write IDICR yet because we do not have gt funcs
1550 * set up */
1551 dev_priv->ellc_size = 128;
1552 DRM_INFO("Found %zuMB of eLLC\n", dev_priv->ellc_size);
1553 }
1554 1560
1555 ret = i915_gem_gtt_init(dev); 1561 ret = i915_gem_gtt_init(dev);
1556 if (ret) 1562 if (ret)
@@ -1609,13 +1615,9 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
1609 goto out_mtrrfree; 1615 goto out_mtrrfree;
1610 } 1616 }
1611 1617
1612 /* This must be called before any calls to HAS_PCH_* */
1613 intel_detect_pch(dev);
1614
1615 intel_irq_init(dev); 1618 intel_irq_init(dev);
1616 intel_pm_init(dev); 1619 intel_pm_init(dev);
1617 intel_uncore_sanitize(dev); 1620 intel_uncore_sanitize(dev);
1618 intel_uncore_init(dev);
1619 1621
1620 /* Try to make sure MCHBAR is enabled before poking at it */ 1622 /* Try to make sure MCHBAR is enabled before poking at it */
1621 intel_setup_mchbar(dev); 1623 intel_setup_mchbar(dev);
@@ -1699,6 +1701,7 @@ out_gtt:
1699 drm_mm_takedown(&dev_priv->gtt.base.mm); 1701 drm_mm_takedown(&dev_priv->gtt.base.mm);
1700 dev_priv->gtt.base.cleanup(&dev_priv->gtt.base); 1702 dev_priv->gtt.base.cleanup(&dev_priv->gtt.base);
1701out_regs: 1703out_regs:
1704 intel_uncore_fini(dev);
1702 pci_iounmap(dev->pdev, dev_priv->regs); 1705 pci_iounmap(dev->pdev, dev_priv->regs);
1703put_bridge: 1706put_bridge:
1704 pci_dev_put(dev_priv->bridge_dev); 1707 pci_dev_put(dev_priv->bridge_dev);
@@ -1729,15 +1732,9 @@ int i915_driver_unload(struct drm_device *dev)
1729 if (dev_priv->mm.inactive_shrinker.scan_objects) 1732 if (dev_priv->mm.inactive_shrinker.scan_objects)
1730 unregister_shrinker(&dev_priv->mm.inactive_shrinker); 1733 unregister_shrinker(&dev_priv->mm.inactive_shrinker);
1731 1734
1732 mutex_lock(&dev->struct_mutex); 1735 ret = i915_gem_suspend(dev);
1733 ret = i915_gpu_idle(dev);
1734 if (ret) 1736 if (ret)
1735 DRM_ERROR("failed to idle hardware: %d\n", ret); 1737 DRM_ERROR("failed to idle hardware: %d\n", ret);
1736 i915_gem_retire_requests(dev);
1737 mutex_unlock(&dev->struct_mutex);
1738
1739 /* Cancel the retire work handler, which should be idle now. */
1740 cancel_delayed_work_sync(&dev_priv->mm.retire_work);
1741 1738
1742 io_mapping_free(dev_priv->gtt.mappable); 1739 io_mapping_free(dev_priv->gtt.mappable);
1743 arch_phys_wc_del(dev_priv->gtt.mtrr); 1740 arch_phys_wc_del(dev_priv->gtt.mtrr);
@@ -1852,7 +1849,7 @@ void i915_driver_lastclose(struct drm_device * dev)
1852 return; 1849 return;
1853 1850
1854 if (drm_core_check_feature(dev, DRIVER_MODESET)) { 1851 if (drm_core_check_feature(dev, DRIVER_MODESET)) {
1855 intel_fb_restore_mode(dev); 1852 intel_fbdev_restore_mode(dev);
1856 vga_switcheroo_process_delayed_switch(); 1853 vga_switcheroo_process_delayed_switch();
1857 return; 1854 return;
1858 } 1855 }