diff options
author | Daniel Vetter <daniel.vetter@ffwll.ch> | 2015-04-14 08:00:56 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2015-04-14 08:00:56 -0400 |
commit | c5fe557ddec423afa13410fc5927bb90a7c96765 (patch) | |
tree | 60aafcf77b46349a2bdc808aed92b7a1811cea87 /drivers/gpu/drm/i915/intel_pm.c | |
parent | 30154650b8b58cd2633475d5a730b44baa140d98 (diff) | |
parent | c776eb2edfce88f0a44156b417cac3da11d1f944 (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.c | 33 |
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 | ||
101 | static 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 | |||
101 | static void i915_pineview_get_mem_freq(struct drm_device *dev) | 121 | static 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 | ||
2546 | static void | 2567 | static void |
2547 | skl_ddb_get_pipe_allocation_limits(struct drm_device *dev, | 2568 | skl_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)) { |