aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_runtime_pm.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/i915/intel_runtime_pm.c')
-rw-r--r--drivers/gpu/drm/i915/intel_runtime_pm.c76
1 files changed, 48 insertions, 28 deletions
diff --git a/drivers/gpu/drm/i915/intel_runtime_pm.c b/drivers/gpu/drm/i915/intel_runtime_pm.c
index e856d49d6dc3..6b78295f53db 100644
--- a/drivers/gpu/drm/i915/intel_runtime_pm.c
+++ b/drivers/gpu/drm/i915/intel_runtime_pm.c
@@ -287,7 +287,7 @@ void intel_display_set_init_power(struct drm_i915_private *dev_priv,
287 */ 287 */
288static void hsw_power_well_post_enable(struct drm_i915_private *dev_priv) 288static void hsw_power_well_post_enable(struct drm_i915_private *dev_priv)
289{ 289{
290 struct drm_device *dev = dev_priv->dev; 290 struct drm_device *dev = &dev_priv->drm;
291 291
292 /* 292 /*
293 * After we re-enable the power well, if we touch VGA register 0x3d5 293 * After we re-enable the power well, if we touch VGA register 0x3d5
@@ -318,7 +318,7 @@ static void hsw_power_well_pre_disable(struct drm_i915_private *dev_priv)
318static void skl_power_well_post_enable(struct drm_i915_private *dev_priv, 318static void skl_power_well_post_enable(struct drm_i915_private *dev_priv,
319 struct i915_power_well *power_well) 319 struct i915_power_well *power_well)
320{ 320{
321 struct drm_device *dev = dev_priv->dev; 321 struct drm_device *dev = &dev_priv->drm;
322 322
323 /* 323 /*
324 * After we re-enable the power well, if we touch VGA register 0x3d5 324 * After we re-enable the power well, if we touch VGA register 0x3d5
@@ -365,8 +365,11 @@ static void hsw_set_power_well(struct drm_i915_private *dev_priv,
365 365
366 if (!is_enabled) { 366 if (!is_enabled) {
367 DRM_DEBUG_KMS("Enabling power well\n"); 367 DRM_DEBUG_KMS("Enabling power well\n");
368 if (wait_for((I915_READ(HSW_PWR_WELL_DRIVER) & 368 if (intel_wait_for_register(dev_priv,
369 HSW_PWR_WELL_STATE_ENABLED), 20)) 369 HSW_PWR_WELL_DRIVER,
370 HSW_PWR_WELL_STATE_ENABLED,
371 HSW_PWR_WELL_STATE_ENABLED,
372 20))
370 DRM_ERROR("Timeout enabling power well\n"); 373 DRM_ERROR("Timeout enabling power well\n");
371 hsw_power_well_post_enable(dev_priv); 374 hsw_power_well_post_enable(dev_priv);
372 } 375 }
@@ -578,6 +581,7 @@ void bxt_enable_dc9(struct drm_i915_private *dev_priv)
578 581
579 DRM_DEBUG_KMS("Enabling DC9\n"); 582 DRM_DEBUG_KMS("Enabling DC9\n");
580 583
584 intel_power_sequencer_reset(dev_priv);
581 gen9_set_dc_state(dev_priv, DC_STATE_EN_DC9); 585 gen9_set_dc_state(dev_priv, DC_STATE_EN_DC9);
582} 586}
583 587
@@ -699,8 +703,11 @@ static void skl_set_power_well(struct drm_i915_private *dev_priv,
699 703
700 switch (power_well->data) { 704 switch (power_well->data) {
701 case SKL_DISP_PW_1: 705 case SKL_DISP_PW_1:
702 if (wait_for((I915_READ(SKL_FUSE_STATUS) & 706 if (intel_wait_for_register(dev_priv,
703 SKL_FUSE_PG0_DIST_STATUS), 1)) { 707 SKL_FUSE_STATUS,
708 SKL_FUSE_PG0_DIST_STATUS,
709 SKL_FUSE_PG0_DIST_STATUS,
710 1)) {
704 DRM_ERROR("PG0 not enabled\n"); 711 DRM_ERROR("PG0 not enabled\n");
705 return; 712 return;
706 } 713 }
@@ -761,12 +768,18 @@ static void skl_set_power_well(struct drm_i915_private *dev_priv,
761 768
762 if (check_fuse_status) { 769 if (check_fuse_status) {
763 if (power_well->data == SKL_DISP_PW_1) { 770 if (power_well->data == SKL_DISP_PW_1) {
764 if (wait_for((I915_READ(SKL_FUSE_STATUS) & 771 if (intel_wait_for_register(dev_priv,
765 SKL_FUSE_PG1_DIST_STATUS), 1)) 772 SKL_FUSE_STATUS,
773 SKL_FUSE_PG1_DIST_STATUS,
774 SKL_FUSE_PG1_DIST_STATUS,
775 1))
766 DRM_ERROR("PG1 distributing status timeout\n"); 776 DRM_ERROR("PG1 distributing status timeout\n");
767 } else if (power_well->data == SKL_DISP_PW_2) { 777 } else if (power_well->data == SKL_DISP_PW_2) {
768 if (wait_for((I915_READ(SKL_FUSE_STATUS) & 778 if (intel_wait_for_register(dev_priv,
769 SKL_FUSE_PG2_DIST_STATUS), 1)) 779 SKL_FUSE_STATUS,
780 SKL_FUSE_PG2_DIST_STATUS,
781 SKL_FUSE_PG2_DIST_STATUS,
782 1))
770 DRM_ERROR("PG2 distributing status timeout\n"); 783 DRM_ERROR("PG2 distributing status timeout\n");
771 } 784 }
772 } 785 }
@@ -917,7 +930,7 @@ static void gen9_dc_off_power_well_enable(struct drm_i915_private *dev_priv,
917 gen9_set_dc_state(dev_priv, DC_STATE_DISABLE); 930 gen9_set_dc_state(dev_priv, DC_STATE_DISABLE);
918 931
919 WARN_ON(dev_priv->cdclk_freq != 932 WARN_ON(dev_priv->cdclk_freq !=
920 dev_priv->display.get_display_clock_speed(dev_priv->dev)); 933 dev_priv->display.get_display_clock_speed(&dev_priv->drm));
921 934
922 gen9_assert_dbuf_enabled(dev_priv); 935 gen9_assert_dbuf_enabled(dev_priv);
923 936
@@ -1075,7 +1088,7 @@ static void vlv_display_power_well_init(struct drm_i915_private *dev_priv)
1075 * 1088 *
1076 * CHV DPLL B/C have some issues if VGA mode is enabled. 1089 * CHV DPLL B/C have some issues if VGA mode is enabled.
1077 */ 1090 */
1078 for_each_pipe(dev_priv->dev, pipe) { 1091 for_each_pipe(&dev_priv->drm, pipe) {
1079 u32 val = I915_READ(DPLL(pipe)); 1092 u32 val = I915_READ(DPLL(pipe));
1080 1093
1081 val |= DPLL_REF_CLK_ENABLE_VLV | DPLL_VGA_MODE_DIS; 1094 val |= DPLL_REF_CLK_ENABLE_VLV | DPLL_VGA_MODE_DIS;
@@ -1100,7 +1113,7 @@ static void vlv_display_power_well_init(struct drm_i915_private *dev_priv)
1100 1113
1101 intel_hpd_init(dev_priv); 1114 intel_hpd_init(dev_priv);
1102 1115
1103 i915_redisable_vga_power_on(dev_priv->dev); 1116 i915_redisable_vga_power_on(&dev_priv->drm);
1104} 1117}
1105 1118
1106static void vlv_display_power_well_deinit(struct drm_i915_private *dev_priv) 1119static void vlv_display_power_well_deinit(struct drm_i915_private *dev_priv)
@@ -1110,9 +1123,9 @@ static void vlv_display_power_well_deinit(struct drm_i915_private *dev_priv)
1110 spin_unlock_irq(&dev_priv->irq_lock); 1123 spin_unlock_irq(&dev_priv->irq_lock);
1111 1124
1112 /* make sure we're done processing display irqs */ 1125 /* make sure we're done processing display irqs */
1113 synchronize_irq(dev_priv->dev->irq); 1126 synchronize_irq(dev_priv->drm.irq);
1114 1127
1115 vlv_power_sequencer_reset(dev_priv); 1128 intel_power_sequencer_reset(dev_priv);
1116} 1129}
1117 1130
1118static void vlv_display_power_well_enable(struct drm_i915_private *dev_priv, 1131static void vlv_display_power_well_enable(struct drm_i915_private *dev_priv,
@@ -1205,7 +1218,6 @@ static void assert_chv_phy_status(struct drm_i915_private *dev_priv)
1205 u32 phy_control = dev_priv->chv_phy_control; 1218 u32 phy_control = dev_priv->chv_phy_control;
1206 u32 phy_status = 0; 1219 u32 phy_status = 0;
1207 u32 phy_status_mask = 0xffffffff; 1220 u32 phy_status_mask = 0xffffffff;
1208 u32 tmp;
1209 1221
1210 /* 1222 /*
1211 * The BIOS can leave the PHY is some weird state 1223 * The BIOS can leave the PHY is some weird state
@@ -1293,10 +1305,14 @@ static void assert_chv_phy_status(struct drm_i915_private *dev_priv)
1293 * The PHY may be busy with some initial calibration and whatnot, 1305 * The PHY may be busy with some initial calibration and whatnot,
1294 * so the power state can take a while to actually change. 1306 * so the power state can take a while to actually change.
1295 */ 1307 */
1296 if (wait_for((tmp = I915_READ(DISPLAY_PHY_STATUS) & phy_status_mask) == phy_status, 10)) 1308 if (intel_wait_for_register(dev_priv,
1297 WARN(phy_status != tmp, 1309 DISPLAY_PHY_STATUS,
1298 "Unexpected PHY_STATUS 0x%08x, expected 0x%08x (PHY_CONTROL=0x%08x)\n", 1310 phy_status_mask,
1299 tmp, phy_status, dev_priv->chv_phy_control); 1311 phy_status,
1312 10))
1313 DRM_ERROR("Unexpected PHY_STATUS 0x%08x, expected 0x%08x (PHY_CONTROL=0x%08x)\n",
1314 I915_READ(DISPLAY_PHY_STATUS) & phy_status_mask,
1315 phy_status, dev_priv->chv_phy_control);
1300} 1316}
1301 1317
1302#undef BITS_SET 1318#undef BITS_SET
@@ -1324,7 +1340,11 @@ static void chv_dpio_cmn_power_well_enable(struct drm_i915_private *dev_priv,
1324 vlv_set_power_well(dev_priv, power_well, true); 1340 vlv_set_power_well(dev_priv, power_well, true);
1325 1341
1326 /* Poll for phypwrgood signal */ 1342 /* Poll for phypwrgood signal */
1327 if (wait_for(I915_READ(DISPLAY_PHY_STATUS) & PHY_POWERGOOD(phy), 1)) 1343 if (intel_wait_for_register(dev_priv,
1344 DISPLAY_PHY_STATUS,
1345 PHY_POWERGOOD(phy),
1346 PHY_POWERGOOD(phy),
1347 1))
1328 DRM_ERROR("Display PHY %d is not power up\n", phy); 1348 DRM_ERROR("Display PHY %d is not power up\n", phy);
1329 1349
1330 mutex_lock(&dev_priv->sb_lock); 1350 mutex_lock(&dev_priv->sb_lock);
@@ -2255,7 +2275,7 @@ int intel_power_domains_init(struct drm_i915_private *dev_priv)
2255 */ 2275 */
2256void intel_power_domains_fini(struct drm_i915_private *dev_priv) 2276void intel_power_domains_fini(struct drm_i915_private *dev_priv)
2257{ 2277{
2258 struct device *device = &dev_priv->dev->pdev->dev; 2278 struct device *device = &dev_priv->drm.pdev->dev;
2259 2279
2260 /* 2280 /*
2261 * The i915.ko module is still not prepared to be loaded when 2281 * The i915.ko module is still not prepared to be loaded when
@@ -2556,7 +2576,7 @@ static void vlv_cmnlane_wa(struct drm_i915_private *dev_priv)
2556 */ 2576 */
2557void intel_power_domains_init_hw(struct drm_i915_private *dev_priv, bool resume) 2577void intel_power_domains_init_hw(struct drm_i915_private *dev_priv, bool resume)
2558{ 2578{
2559 struct drm_device *dev = dev_priv->dev; 2579 struct drm_device *dev = &dev_priv->drm;
2560 struct i915_power_domains *power_domains = &dev_priv->power_domains; 2580 struct i915_power_domains *power_domains = &dev_priv->power_domains;
2561 2581
2562 power_domains->initializing = true; 2582 power_domains->initializing = true;
@@ -2618,7 +2638,7 @@ void intel_power_domains_suspend(struct drm_i915_private *dev_priv)
2618 */ 2638 */
2619void intel_runtime_pm_get(struct drm_i915_private *dev_priv) 2639void intel_runtime_pm_get(struct drm_i915_private *dev_priv)
2620{ 2640{
2621 struct drm_device *dev = dev_priv->dev; 2641 struct drm_device *dev = &dev_priv->drm;
2622 struct device *device = &dev->pdev->dev; 2642 struct device *device = &dev->pdev->dev;
2623 2643
2624 pm_runtime_get_sync(device); 2644 pm_runtime_get_sync(device);
@@ -2639,7 +2659,7 @@ void intel_runtime_pm_get(struct drm_i915_private *dev_priv)
2639 */ 2659 */
2640bool intel_runtime_pm_get_if_in_use(struct drm_i915_private *dev_priv) 2660bool intel_runtime_pm_get_if_in_use(struct drm_i915_private *dev_priv)
2641{ 2661{
2642 struct drm_device *dev = dev_priv->dev; 2662 struct drm_device *dev = &dev_priv->drm;
2643 struct device *device = &dev->pdev->dev; 2663 struct device *device = &dev->pdev->dev;
2644 2664
2645 if (IS_ENABLED(CONFIG_PM)) { 2665 if (IS_ENABLED(CONFIG_PM)) {
@@ -2681,7 +2701,7 @@ bool intel_runtime_pm_get_if_in_use(struct drm_i915_private *dev_priv)
2681 */ 2701 */
2682void intel_runtime_pm_get_noresume(struct drm_i915_private *dev_priv) 2702void intel_runtime_pm_get_noresume(struct drm_i915_private *dev_priv)
2683{ 2703{
2684 struct drm_device *dev = dev_priv->dev; 2704 struct drm_device *dev = &dev_priv->drm;
2685 struct device *device = &dev->pdev->dev; 2705 struct device *device = &dev->pdev->dev;
2686 2706
2687 assert_rpm_wakelock_held(dev_priv); 2707 assert_rpm_wakelock_held(dev_priv);
@@ -2700,7 +2720,7 @@ void intel_runtime_pm_get_noresume(struct drm_i915_private *dev_priv)
2700 */ 2720 */
2701void intel_runtime_pm_put(struct drm_i915_private *dev_priv) 2721void intel_runtime_pm_put(struct drm_i915_private *dev_priv)
2702{ 2722{
2703 struct drm_device *dev = dev_priv->dev; 2723 struct drm_device *dev = &dev_priv->drm;
2704 struct device *device = &dev->pdev->dev; 2724 struct device *device = &dev->pdev->dev;
2705 2725
2706 assert_rpm_wakelock_held(dev_priv); 2726 assert_rpm_wakelock_held(dev_priv);
@@ -2723,7 +2743,7 @@ void intel_runtime_pm_put(struct drm_i915_private *dev_priv)
2723 */ 2743 */
2724void intel_runtime_pm_enable(struct drm_i915_private *dev_priv) 2744void intel_runtime_pm_enable(struct drm_i915_private *dev_priv)
2725{ 2745{
2726 struct drm_device *dev = dev_priv->dev; 2746 struct drm_device *dev = &dev_priv->drm;
2727 struct device *device = &dev->pdev->dev; 2747 struct device *device = &dev->pdev->dev;
2728 2748
2729 pm_runtime_set_autosuspend_delay(device, 10000); /* 10s */ 2749 pm_runtime_set_autosuspend_delay(device, 10000); /* 10s */