aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/i915_drv.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/i915/i915_drv.c')
-rw-r--r--drivers/gpu/drm/i915/i915_drv.c113
1 files changed, 59 insertions, 54 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 44e2c0f5ec50..b1d23c73c147 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -345,7 +345,7 @@ static int i915_getparam_ioctl(struct drm_device *dev, void *data,
345 value = HAS_WT(dev_priv); 345 value = HAS_WT(dev_priv);
346 break; 346 break;
347 case I915_PARAM_HAS_ALIASING_PPGTT: 347 case I915_PARAM_HAS_ALIASING_PPGTT:
348 value = USES_PPGTT(dev_priv); 348 value = min_t(int, INTEL_PPGTT(dev_priv), I915_GEM_PPGTT_FULL);
349 break; 349 break;
350 case I915_PARAM_HAS_SEMAPHORES: 350 case I915_PARAM_HAS_SEMAPHORES:
351 value = HAS_LEGACY_SEMAPHORES(dev_priv); 351 value = HAS_LEGACY_SEMAPHORES(dev_priv);
@@ -645,6 +645,13 @@ static int i915_load_modeset_init(struct drm_device *dev)
645 if (i915_inject_load_failure()) 645 if (i915_inject_load_failure())
646 return -ENODEV; 646 return -ENODEV;
647 647
648 if (INTEL_INFO(dev_priv)->num_pipes) {
649 ret = drm_vblank_init(&dev_priv->drm,
650 INTEL_INFO(dev_priv)->num_pipes);
651 if (ret)
652 goto out;
653 }
654
648 intel_bios_init(dev_priv); 655 intel_bios_init(dev_priv);
649 656
650 /* If we have > 1 VGA cards, then we need to arbitrate access 657 /* If we have > 1 VGA cards, then we need to arbitrate access
@@ -687,7 +694,7 @@ static int i915_load_modeset_init(struct drm_device *dev)
687 if (ret) 694 if (ret)
688 goto cleanup_modeset; 695 goto cleanup_modeset;
689 696
690 intel_setup_overlay(dev_priv); 697 intel_overlay_setup(dev_priv);
691 698
692 if (INTEL_INFO(dev_priv)->num_pipes == 0) 699 if (INTEL_INFO(dev_priv)->num_pipes == 0)
693 return 0; 700 return 0;
@@ -699,6 +706,8 @@ static int i915_load_modeset_init(struct drm_device *dev)
699 /* Only enable hotplug handling once the fbdev is fully set up. */ 706 /* Only enable hotplug handling once the fbdev is fully set up. */
700 intel_hpd_init(dev_priv); 707 intel_hpd_init(dev_priv);
701 708
709 intel_init_ipc(dev_priv);
710
702 return 0; 711 return 0;
703 712
704cleanup_gem: 713cleanup_gem:
@@ -1030,6 +1039,7 @@ static int i915_driver_init_mmio(struct drm_i915_private *dev_priv)
1030 1039
1031err_uncore: 1040err_uncore:
1032 intel_uncore_fini(dev_priv); 1041 intel_uncore_fini(dev_priv);
1042 i915_mmio_cleanup(dev_priv);
1033err_bridge: 1043err_bridge:
1034 pci_dev_put(dev_priv->bridge_dev); 1044 pci_dev_put(dev_priv->bridge_dev);
1035 1045
@@ -1049,17 +1059,6 @@ static void i915_driver_cleanup_mmio(struct drm_i915_private *dev_priv)
1049 1059
1050static void intel_sanitize_options(struct drm_i915_private *dev_priv) 1060static void intel_sanitize_options(struct drm_i915_private *dev_priv)
1051{ 1061{
1052 /*
1053 * i915.enable_ppgtt is read-only, so do an early pass to validate the
1054 * user's requested state against the hardware/driver capabilities. We
1055 * do this now so that we can print out any log messages once rather
1056 * than every time we check intel_enable_ppgtt().
1057 */
1058 i915_modparams.enable_ppgtt =
1059 intel_sanitize_enable_ppgtt(dev_priv,
1060 i915_modparams.enable_ppgtt);
1061 DRM_DEBUG_DRIVER("ppgtt mode: %i\n", i915_modparams.enable_ppgtt);
1062
1063 intel_gvt_sanitize_options(dev_priv); 1062 intel_gvt_sanitize_options(dev_priv);
1064} 1063}
1065 1064
@@ -1175,8 +1174,6 @@ skl_dram_get_channels_info(struct drm_i915_private *dev_priv)
1175 return -EINVAL; 1174 return -EINVAL;
1176 } 1175 }
1177 1176
1178 dram_info->valid_dimm = true;
1179
1180 /* 1177 /*
1181 * If any of the channel is single rank channel, worst case output 1178 * If any of the channel is single rank channel, worst case output
1182 * will be same as if single rank memory, so consider single rank 1179 * will be same as if single rank memory, so consider single rank
@@ -1193,8 +1190,7 @@ skl_dram_get_channels_info(struct drm_i915_private *dev_priv)
1193 return -EINVAL; 1190 return -EINVAL;
1194 } 1191 }
1195 1192
1196 if (ch0.is_16gb_dimm || ch1.is_16gb_dimm) 1193 dram_info->is_16gb_dimm = ch0.is_16gb_dimm || ch1.is_16gb_dimm;
1197 dram_info->is_16gb_dimm = true;
1198 1194
1199 dev_priv->dram_info.symmetric_memory = intel_is_dram_symmetric(val_ch0, 1195 dev_priv->dram_info.symmetric_memory = intel_is_dram_symmetric(val_ch0,
1200 val_ch1, 1196 val_ch1,
@@ -1314,7 +1310,6 @@ bxt_get_dram_info(struct drm_i915_private *dev_priv)
1314 return -EINVAL; 1310 return -EINVAL;
1315 } 1311 }
1316 1312
1317 dram_info->valid_dimm = true;
1318 dram_info->valid = true; 1313 dram_info->valid = true;
1319 return 0; 1314 return 0;
1320} 1315}
@@ -1327,19 +1322,24 @@ intel_get_dram_info(struct drm_i915_private *dev_priv)
1327 int ret; 1322 int ret;
1328 1323
1329 dram_info->valid = false; 1324 dram_info->valid = false;
1330 dram_info->valid_dimm = false;
1331 dram_info->is_16gb_dimm = false;
1332 dram_info->rank = I915_DRAM_RANK_INVALID; 1325 dram_info->rank = I915_DRAM_RANK_INVALID;
1333 dram_info->bandwidth_kbps = 0; 1326 dram_info->bandwidth_kbps = 0;
1334 dram_info->num_channels = 0; 1327 dram_info->num_channels = 0;
1335 1328
1329 /*
1330 * Assume 16Gb DIMMs are present until proven otherwise.
1331 * This is only used for the level 0 watermark latency
1332 * w/a which does not apply to bxt/glk.
1333 */
1334 dram_info->is_16gb_dimm = !IS_GEN9_LP(dev_priv);
1335
1336 if (INTEL_GEN(dev_priv) < 9 || IS_GEMINILAKE(dev_priv)) 1336 if (INTEL_GEN(dev_priv) < 9 || IS_GEMINILAKE(dev_priv))
1337 return; 1337 return;
1338 1338
1339 /* Need to calculate bandwidth only for Gen9 */ 1339 /* Need to calculate bandwidth only for Gen9 */
1340 if (IS_BROXTON(dev_priv)) 1340 if (IS_BROXTON(dev_priv))
1341 ret = bxt_get_dram_info(dev_priv); 1341 ret = bxt_get_dram_info(dev_priv);
1342 else if (INTEL_GEN(dev_priv) == 9) 1342 else if (IS_GEN9(dev_priv))
1343 ret = skl_get_dram_info(dev_priv); 1343 ret = skl_get_dram_info(dev_priv);
1344 else 1344 else
1345 ret = skl_dram_get_channels_info(dev_priv); 1345 ret = skl_dram_get_channels_info(dev_priv);
@@ -1374,6 +1374,15 @@ static int i915_driver_init_hw(struct drm_i915_private *dev_priv)
1374 1374
1375 intel_device_info_runtime_init(mkwrite_device_info(dev_priv)); 1375 intel_device_info_runtime_init(mkwrite_device_info(dev_priv));
1376 1376
1377 if (HAS_PPGTT(dev_priv)) {
1378 if (intel_vgpu_active(dev_priv) &&
1379 !intel_vgpu_has_full_48bit_ppgtt(dev_priv)) {
1380 i915_report_error(dev_priv,
1381 "incompatible vGPU found, support for isolated ppGTT required\n");
1382 return -ENXIO;
1383 }
1384 }
1385
1377 intel_sanitize_options(dev_priv); 1386 intel_sanitize_options(dev_priv);
1378 1387
1379 i915_perf_init(dev_priv); 1388 i915_perf_init(dev_priv);
@@ -1629,14 +1638,16 @@ i915_driver_create(struct pci_dev *pdev, const struct pci_device_id *ent)
1629 (struct intel_device_info *)ent->driver_data; 1638 (struct intel_device_info *)ent->driver_data;
1630 struct intel_device_info *device_info; 1639 struct intel_device_info *device_info;
1631 struct drm_i915_private *i915; 1640 struct drm_i915_private *i915;
1641 int err;
1632 1642
1633 i915 = kzalloc(sizeof(*i915), GFP_KERNEL); 1643 i915 = kzalloc(sizeof(*i915), GFP_KERNEL);
1634 if (!i915) 1644 if (!i915)
1635 return NULL; 1645 return ERR_PTR(-ENOMEM);
1636 1646
1637 if (drm_dev_init(&i915->drm, &driver, &pdev->dev)) { 1647 err = drm_dev_init(&i915->drm, &driver, &pdev->dev);
1648 if (err) {
1638 kfree(i915); 1649 kfree(i915);
1639 return NULL; 1650 return ERR_PTR(err);
1640 } 1651 }
1641 1652
1642 i915->drm.pdev = pdev; 1653 i915->drm.pdev = pdev;
@@ -1649,8 +1660,8 @@ i915_driver_create(struct pci_dev *pdev, const struct pci_device_id *ent)
1649 device_info->device_id = pdev->device; 1660 device_info->device_id = pdev->device;
1650 1661
1651 BUILD_BUG_ON(INTEL_MAX_PLATFORMS > 1662 BUILD_BUG_ON(INTEL_MAX_PLATFORMS >
1652 sizeof(device_info->platform_mask) * BITS_PER_BYTE); 1663 BITS_PER_TYPE(device_info->platform_mask));
1653 BUG_ON(device_info->gen > sizeof(device_info->gen_mask) * BITS_PER_BYTE); 1664 BUG_ON(device_info->gen > BITS_PER_TYPE(device_info->gen_mask));
1654 1665
1655 return i915; 1666 return i915;
1656} 1667}
@@ -1685,8 +1696,8 @@ int i915_driver_load(struct pci_dev *pdev, const struct pci_device_id *ent)
1685 int ret; 1696 int ret;
1686 1697
1687 dev_priv = i915_driver_create(pdev, ent); 1698 dev_priv = i915_driver_create(pdev, ent);
1688 if (!dev_priv) 1699 if (IS_ERR(dev_priv))
1689 return -ENOMEM; 1700 return PTR_ERR(dev_priv);
1690 1701
1691 /* Disable nuclear pageflip by default on pre-ILK */ 1702 /* Disable nuclear pageflip by default on pre-ILK */
1692 if (!i915_modparams.nuclear_pageflip && match_info->gen < 5) 1703 if (!i915_modparams.nuclear_pageflip && match_info->gen < 5)
@@ -1710,26 +1721,12 @@ int i915_driver_load(struct pci_dev *pdev, const struct pci_device_id *ent)
1710 if (ret < 0) 1721 if (ret < 0)
1711 goto out_cleanup_mmio; 1722 goto out_cleanup_mmio;
1712 1723
1713 /*
1714 * TODO: move the vblank init and parts of modeset init steps into one
1715 * of the i915_driver_init_/i915_driver_register functions according
1716 * to the role/effect of the given init step.
1717 */
1718 if (INTEL_INFO(dev_priv)->num_pipes) {
1719 ret = drm_vblank_init(&dev_priv->drm,
1720 INTEL_INFO(dev_priv)->num_pipes);
1721 if (ret)
1722 goto out_cleanup_hw;
1723 }
1724
1725 ret = i915_load_modeset_init(&dev_priv->drm); 1724 ret = i915_load_modeset_init(&dev_priv->drm);
1726 if (ret < 0) 1725 if (ret < 0)
1727 goto out_cleanup_hw; 1726 goto out_cleanup_hw;
1728 1727
1729 i915_driver_register(dev_priv); 1728 i915_driver_register(dev_priv);
1730 1729
1731 intel_init_ipc(dev_priv);
1732
1733 enable_rpm_wakeref_asserts(dev_priv); 1730 enable_rpm_wakeref_asserts(dev_priv);
1734 1731
1735 i915_welcome_messages(dev_priv); 1732 i915_welcome_messages(dev_priv);
@@ -1781,7 +1778,6 @@ void i915_driver_unload(struct drm_device *dev)
1781 i915_reset_error_state(dev_priv); 1778 i915_reset_error_state(dev_priv);
1782 1779
1783 i915_gem_fini(dev_priv); 1780 i915_gem_fini(dev_priv);
1784 intel_fbc_cleanup_cfb(dev_priv);
1785 1781
1786 intel_power_domains_fini_hw(dev_priv); 1782 intel_power_domains_fini_hw(dev_priv);
1787 1783
@@ -1919,9 +1915,7 @@ static int i915_drm_suspend(struct drm_device *dev)
1919 i915_save_state(dev_priv); 1915 i915_save_state(dev_priv);
1920 1916
1921 opregion_target_state = suspend_to_idle(dev_priv) ? PCI_D1 : PCI_D3cold; 1917 opregion_target_state = suspend_to_idle(dev_priv) ? PCI_D1 : PCI_D3cold;
1922 intel_opregion_notify_adapter(dev_priv, opregion_target_state); 1918 intel_opregion_suspend(dev_priv, opregion_target_state);
1923
1924 intel_opregion_unregister(dev_priv);
1925 1919
1926 intel_fbdev_set_suspend(dev, FBINFO_STATE_SUSPENDED, true); 1920 intel_fbdev_set_suspend(dev, FBINFO_STATE_SUSPENDED, true);
1927 1921
@@ -1962,7 +1956,7 @@ static int i915_drm_suspend_late(struct drm_device *dev, bool hibernation)
1962 get_suspend_mode(dev_priv, hibernation)); 1956 get_suspend_mode(dev_priv, hibernation));
1963 1957
1964 ret = 0; 1958 ret = 0;
1965 if (IS_GEN9_LP(dev_priv)) 1959 if (INTEL_GEN(dev_priv) >= 11 || IS_GEN9_LP(dev_priv))
1966 bxt_enable_dc9(dev_priv); 1960 bxt_enable_dc9(dev_priv);
1967 else if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv)) 1961 else if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv))
1968 hsw_enable_pc8(dev_priv); 1962 hsw_enable_pc8(dev_priv);
@@ -2040,7 +2034,6 @@ static int i915_drm_resume(struct drm_device *dev)
2040 2034
2041 i915_restore_state(dev_priv); 2035 i915_restore_state(dev_priv);
2042 intel_pps_unlock_regs_wa(dev_priv); 2036 intel_pps_unlock_regs_wa(dev_priv);
2043 intel_opregion_setup(dev_priv);
2044 2037
2045 intel_init_pch_refclk(dev_priv); 2038 intel_init_pch_refclk(dev_priv);
2046 2039
@@ -2082,12 +2075,10 @@ static int i915_drm_resume(struct drm_device *dev)
2082 * */ 2075 * */
2083 intel_hpd_init(dev_priv); 2076 intel_hpd_init(dev_priv);
2084 2077
2085 intel_opregion_register(dev_priv); 2078 intel_opregion_resume(dev_priv);
2086 2079
2087 intel_fbdev_set_suspend(dev, FBINFO_STATE_RUNNING, false); 2080 intel_fbdev_set_suspend(dev, FBINFO_STATE_RUNNING, false);
2088 2081
2089 intel_opregion_notify_adapter(dev_priv, PCI_D0);
2090
2091 intel_power_domains_enable(dev_priv); 2082 intel_power_domains_enable(dev_priv);
2092 2083
2093 enable_rpm_wakeref_asserts(dev_priv); 2084 enable_rpm_wakeref_asserts(dev_priv);
@@ -2155,7 +2146,7 @@ static int i915_drm_resume_early(struct drm_device *dev)
2155 2146
2156 intel_uncore_resume_early(dev_priv); 2147 intel_uncore_resume_early(dev_priv);
2157 2148
2158 if (IS_GEN9_LP(dev_priv)) { 2149 if (INTEL_GEN(dev_priv) >= 11 || IS_GEN9_LP(dev_priv)) {
2159 gen9_sanitize_dc_state(dev_priv); 2150 gen9_sanitize_dc_state(dev_priv);
2160 bxt_disable_dc9(dev_priv); 2151 bxt_disable_dc9(dev_priv);
2161 } else if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv)) { 2152 } else if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv)) {
@@ -2922,7 +2913,10 @@ static int intel_runtime_suspend(struct device *kdev)
2922 intel_uncore_suspend(dev_priv); 2913 intel_uncore_suspend(dev_priv);
2923 2914
2924 ret = 0; 2915 ret = 0;
2925 if (IS_GEN9_LP(dev_priv)) { 2916 if (INTEL_GEN(dev_priv) >= 11) {
2917 icl_display_core_uninit(dev_priv);
2918 bxt_enable_dc9(dev_priv);
2919 } else if (IS_GEN9_LP(dev_priv)) {
2926 bxt_display_core_uninit(dev_priv); 2920 bxt_display_core_uninit(dev_priv);
2927 bxt_enable_dc9(dev_priv); 2921 bxt_enable_dc9(dev_priv);
2928 } else if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv)) { 2922 } else if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv)) {
@@ -3007,7 +3001,18 @@ static int intel_runtime_resume(struct device *kdev)
3007 if (intel_uncore_unclaimed_mmio(dev_priv)) 3001 if (intel_uncore_unclaimed_mmio(dev_priv))
3008 DRM_DEBUG_DRIVER("Unclaimed access during suspend, bios?\n"); 3002 DRM_DEBUG_DRIVER("Unclaimed access during suspend, bios?\n");
3009 3003
3010 if (IS_GEN9_LP(dev_priv)) { 3004 if (INTEL_GEN(dev_priv) >= 11) {
3005 bxt_disable_dc9(dev_priv);
3006 icl_display_core_init(dev_priv, true);
3007 if (dev_priv->csr.dmc_payload) {
3008 if (dev_priv->csr.allowed_dc_mask &
3009 DC_STATE_EN_UPTO_DC6)
3010 skl_enable_dc6(dev_priv);
3011 else if (dev_priv->csr.allowed_dc_mask &
3012 DC_STATE_EN_UPTO_DC5)
3013 gen9_enable_dc5(dev_priv);
3014 }
3015 } else if (IS_GEN9_LP(dev_priv)) {
3011 bxt_disable_dc9(dev_priv); 3016 bxt_disable_dc9(dev_priv);
3012 bxt_display_core_init(dev_priv, true); 3017 bxt_display_core_init(dev_priv, true);
3013 if (dev_priv->csr.dmc_payload && 3018 if (dev_priv->csr.dmc_payload &&