aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDeepak S <deepak.s@linux.intel.com>2014-07-10 03:46:24 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2014-07-11 12:22:00 -0400
commit67c3bf6f55a97a0915a0f9ea07278a3073cc9601 (patch)
treeefed3f9d8cc82c764e60f0401b5f74b30c8cd55b
parent74c4f62bcdbb0e2ee115197eafd4edc05bbcf55c (diff)
drm/i915: populate mem_freq/cz_clock for chv
We need mem_freq or cz clock for freq/opcode conversion Signed-off-by: Deepak S <deepak.s@linux.intel.com> Reviewed-by: Mika Kuoppala <mika.kuoppala@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h1
-rw-r--r--drivers/gpu/drm/i915/i915_reg.h6
-rw-r--r--drivers/gpu/drm/i915/intel_pm.c29
3 files changed, 36 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 7031757628ff..8620ea91e108 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -931,6 +931,7 @@ struct intel_gen6_power_mgmt {
931 u8 efficient_freq; /* AKA RPe. Pre-determined balanced frequency */ 931 u8 efficient_freq; /* AKA RPe. Pre-determined balanced frequency */
932 u8 rp1_freq; /* "less than" RP0 power/freqency */ 932 u8 rp1_freq; /* "less than" RP0 power/freqency */
933 u8 rp0_freq; /* Non-overclocked max frequency. */ 933 u8 rp0_freq; /* Non-overclocked max frequency. */
934 u32 cz_freq;
934 935
935 u32 ei_interrupt_count; 936 u32 ei_interrupt_count;
936 937
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index 2d2c4deb3e87..0ebe0f49db28 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -5538,6 +5538,12 @@ enum punit_power_well {
5538 GEN6_PM_RP_DOWN_THRESHOLD | \ 5538 GEN6_PM_RP_DOWN_THRESHOLD | \
5539 GEN6_PM_RP_DOWN_TIMEOUT) 5539 GEN6_PM_RP_DOWN_TIMEOUT)
5540 5540
5541#define CHV_CZ_CLOCK_FREQ_MODE_200 200
5542#define CHV_CZ_CLOCK_FREQ_MODE_267 267
5543#define CHV_CZ_CLOCK_FREQ_MODE_320 320
5544#define CHV_CZ_CLOCK_FREQ_MODE_333 333
5545#define CHV_CZ_CLOCK_FREQ_MODE_400 400
5546
5541#define GEN7_GT_SCRATCH_BASE 0x4F100 5547#define GEN7_GT_SCRATCH_BASE 0x4F100
5542#define GEN7_GT_SCRATCH_REG_NUM 8 5548#define GEN7_GT_SCRATCH_REG_NUM 8
5543 5549
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index 8066ca5e2719..32ccd7a9378d 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -5700,6 +5700,35 @@ static void valleyview_init_clock_gating(struct drm_device *dev)
5700static void cherryview_init_clock_gating(struct drm_device *dev) 5700static void cherryview_init_clock_gating(struct drm_device *dev)
5701{ 5701{
5702 struct drm_i915_private *dev_priv = dev->dev_private; 5702 struct drm_i915_private *dev_priv = dev->dev_private;
5703 u32 val;
5704
5705 mutex_lock(&dev_priv->rps.hw_lock);
5706 val = vlv_punit_read(dev_priv, CCK_FUSE_REG);
5707 mutex_unlock(&dev_priv->rps.hw_lock);
5708 switch ((val >> 2) & 0x7) {
5709 case 0:
5710 case 1:
5711 dev_priv->rps.cz_freq = CHV_CZ_CLOCK_FREQ_MODE_200;
5712 dev_priv->mem_freq = 1600;
5713 break;
5714 case 2:
5715 dev_priv->rps.cz_freq = CHV_CZ_CLOCK_FREQ_MODE_267;
5716 dev_priv->mem_freq = 1600;
5717 break;
5718 case 3:
5719 dev_priv->rps.cz_freq = CHV_CZ_CLOCK_FREQ_MODE_333;
5720 dev_priv->mem_freq = 2000;
5721 break;
5722 case 4:
5723 dev_priv->rps.cz_freq = CHV_CZ_CLOCK_FREQ_MODE_320;
5724 dev_priv->mem_freq = 1600;
5725 break;
5726 case 5:
5727 dev_priv->rps.cz_freq = CHV_CZ_CLOCK_FREQ_MODE_400;
5728 dev_priv->mem_freq = 1600;
5729 break;
5730 }
5731 DRM_DEBUG_DRIVER("DDR speed: %d MHz", dev_priv->mem_freq);
5703 5732
5704 I915_WRITE(DSPCLK_GATE_D, VRHUNIT_CLOCK_GATE_DISABLE); 5733 I915_WRITE(DSPCLK_GATE_D, VRHUNIT_CLOCK_GATE_DISABLE);
5705 5734