aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_pm.c
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2015-04-14 08:00:56 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2015-04-14 08:00:56 -0400
commitc5fe557ddec423afa13410fc5927bb90a7c96765 (patch)
tree60aafcf77b46349a2bdc808aed92b7a1811cea87 /drivers/gpu/drm/i915/intel_pm.c
parent30154650b8b58cd2633475d5a730b44baa140d98 (diff)
parentc776eb2edfce88f0a44156b417cac3da11d1f944 (diff)
Merge branch 'topic/bxt-stage1' into drm-intel-next-queued
Separate topic branch for bxt didn't work out since we needed to refactor the gmbus code a bit to make it look decent. So backmerge. Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_pm.c')
-rw-r--r--drivers/gpu/drm/i915/intel_pm.c33
1 files changed, 31 insertions, 2 deletions
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index fc7e0c7545fd..a80bfd565ce4 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -98,6 +98,26 @@ static void skl_init_clock_gating(struct drm_device *dev)
98 GEN8_LQSC_RO_PERF_DIS); 98 GEN8_LQSC_RO_PERF_DIS);
99} 99}
100 100
101static void bxt_init_clock_gating(struct drm_device *dev)
102{
103 struct drm_i915_private *dev_priv = dev->dev_private;
104
105 gen9_init_clock_gating(dev);
106
107 /*
108 * FIXME:
109 * GEN8_SDEUNIT_CLOCK_GATE_DISABLE applies on A0 only.
110 * GEN8_HDCUNIT_CLOCK_GATE_DISABLE_HDCREQ applies on 3x6 GT SKUs only.
111 */
112 /* WaDisableSDEUnitClockGating:bxt */
113 I915_WRITE(GEN8_UCGCTL6, I915_READ(GEN8_UCGCTL6) |
114 GEN8_SDEUNIT_CLOCK_GATE_DISABLE |
115 GEN8_HDCUNIT_CLOCK_GATE_DISABLE_HDCREQ);
116
117 /* FIXME: apply on A0 only */
118 I915_WRITE(TILECTL, I915_READ(TILECTL) | TILECTL_TLBPF);
119}
120
101static void i915_pineview_get_mem_freq(struct drm_device *dev) 121static void i915_pineview_get_mem_freq(struct drm_device *dev)
102{ 122{
103 struct drm_i915_private *dev_priv = dev->dev_private; 123 struct drm_i915_private *dev_priv = dev->dev_private;
@@ -2542,6 +2562,7 @@ static bool ilk_disable_lp_wm(struct drm_device *dev)
2542 */ 2562 */
2543 2563
2544#define SKL_DDB_SIZE 896 /* in blocks */ 2564#define SKL_DDB_SIZE 896 /* in blocks */
2565#define BXT_DDB_SIZE 512
2545 2566
2546static void 2567static void
2547skl_ddb_get_pipe_allocation_limits(struct drm_device *dev, 2568skl_ddb_get_pipe_allocation_limits(struct drm_device *dev,
@@ -2560,7 +2581,10 @@ skl_ddb_get_pipe_allocation_limits(struct drm_device *dev,
2560 return; 2581 return;
2561 } 2582 }
2562 2583
2563 ddb_size = SKL_DDB_SIZE; 2584 if (IS_BROXTON(dev))
2585 ddb_size = BXT_DDB_SIZE;
2586 else
2587 ddb_size = SKL_DDB_SIZE;
2564 2588
2565 ddb_size -= 4; /* 4 blocks for bypass path allocation */ 2589 ddb_size -= 4; /* 4 blocks for bypass path allocation */
2566 2590
@@ -6570,7 +6594,12 @@ void intel_init_pm(struct drm_device *dev)
6570 if (INTEL_INFO(dev)->gen >= 9) { 6594 if (INTEL_INFO(dev)->gen >= 9) {
6571 skl_setup_wm_latency(dev); 6595 skl_setup_wm_latency(dev);
6572 6596
6573 dev_priv->display.init_clock_gating = skl_init_clock_gating; 6597 if (IS_BROXTON(dev))
6598 dev_priv->display.init_clock_gating =
6599 bxt_init_clock_gating;
6600 else if (IS_SKYLAKE(dev))
6601 dev_priv->display.init_clock_gating =
6602 skl_init_clock_gating;
6574 dev_priv->display.update_wm = skl_update_wm; 6603 dev_priv->display.update_wm = skl_update_wm;
6575 dev_priv->display.update_sprite_wm = skl_update_sprite_wm; 6604 dev_priv->display.update_sprite_wm = skl_update_sprite_wm;
6576 } else if (HAS_PCH_SPLIT(dev)) { 6605 } else if (HAS_PCH_SPLIT(dev)) {