aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2013-07-26 02:35:42 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2013-07-26 13:54:46 -0400
commit257a7ffcfaf68718c963db6e9978d1f4f647986b (patch)
tree6be9d1fea506a58abd06bea212531148cfb5488d /drivers/gpu/drm/i915
parentde51f04f06d5e4a37f8e5a2b1019eb34140480f0 (diff)
drm/i915: fix pnv display core clock readout out
We need the correct clock to accurately assess whether we need to enable the double wide pipe mode or not. Cc: Chris Wilson <chris@chris-wilson.co.uk> Cc: Stéphane Marchesin <marcheu@chromium.org> Cc: Stuart Abercrombie <sabercrombie@google.com> Reviewed-by: Jani Nikula <jani.nikula@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915')
-rw-r--r--drivers/gpu/drm/i915/i915_reg.h6
-rw-r--r--drivers/gpu/drm/i915/intel_display.c29
2 files changed, 34 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index 6caa748fa00f..3aebe5dee4df 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -61,6 +61,12 @@
61#define GC_LOW_FREQUENCY_ENABLE (1 << 7) 61#define GC_LOW_FREQUENCY_ENABLE (1 << 7)
62#define GC_DISPLAY_CLOCK_190_200_MHZ (0 << 4) 62#define GC_DISPLAY_CLOCK_190_200_MHZ (0 << 4)
63#define GC_DISPLAY_CLOCK_333_MHZ (4 << 4) 63#define GC_DISPLAY_CLOCK_333_MHZ (4 << 4)
64#define GC_DISPLAY_CLOCK_267_MHZ_PNV (0 << 4)
65#define GC_DISPLAY_CLOCK_333_MHZ_PNV (1 << 4)
66#define GC_DISPLAY_CLOCK_444_MHZ_PNV (2 << 4)
67#define GC_DISPLAY_CLOCK_200_MHZ_PNV (5 << 4)
68#define GC_DISPLAY_CLOCK_133_MHZ_PNV (6 << 4)
69#define GC_DISPLAY_CLOCK_167_MHZ_PNV (7 << 4)
64#define GC_DISPLAY_CLOCK_MASK (7 << 4) 70#define GC_DISPLAY_CLOCK_MASK (7 << 4)
65#define GM45_GC_RENDER_CLOCK_MASK (0xf << 0) 71#define GM45_GC_RENDER_CLOCK_MASK (0xf << 0)
66#define GM45_GC_RENDER_CLOCK_266_MHZ (8 << 0) 72#define GM45_GC_RENDER_CLOCK_266_MHZ (8 << 0)
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index b3389d74d695..3e66f05ea342 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -4163,6 +4163,30 @@ static int i9xx_misc_get_display_clock_speed(struct drm_device *dev)
4163 return 200000; 4163 return 200000;
4164} 4164}
4165 4165
4166static int pnv_get_display_clock_speed(struct drm_device *dev)
4167{
4168 u16 gcfgc = 0;
4169
4170 pci_read_config_word(dev->pdev, GCFGC, &gcfgc);
4171
4172 switch (gcfgc & GC_DISPLAY_CLOCK_MASK) {
4173 case GC_DISPLAY_CLOCK_267_MHZ_PNV:
4174 return 267000;
4175 case GC_DISPLAY_CLOCK_333_MHZ_PNV:
4176 return 333000;
4177 case GC_DISPLAY_CLOCK_444_MHZ_PNV:
4178 return 444000;
4179 case GC_DISPLAY_CLOCK_200_MHZ_PNV:
4180 return 200000;
4181 default:
4182 DRM_ERROR("Unknown pnv display core clock 0x%04x\n", gcfgc);
4183 case GC_DISPLAY_CLOCK_133_MHZ_PNV:
4184 return 133000;
4185 case GC_DISPLAY_CLOCK_167_MHZ_PNV:
4186 return 167000;
4187 }
4188}
4189
4166static int i915gm_get_display_clock_speed(struct drm_device *dev) 4190static int i915gm_get_display_clock_speed(struct drm_device *dev)
4167{ 4191{
4168 u16 gcfgc = 0; 4192 u16 gcfgc = 0;
@@ -9605,9 +9629,12 @@ static void intel_init_display(struct drm_device *dev)
9605 else if (IS_I915G(dev)) 9629 else if (IS_I915G(dev))
9606 dev_priv->display.get_display_clock_speed = 9630 dev_priv->display.get_display_clock_speed =
9607 i915_get_display_clock_speed; 9631 i915_get_display_clock_speed;
9608 else if (IS_I945GM(dev) || IS_845G(dev) || IS_PINEVIEW_M(dev)) 9632 else if (IS_I945GM(dev) || IS_845G(dev))
9609 dev_priv->display.get_display_clock_speed = 9633 dev_priv->display.get_display_clock_speed =
9610 i9xx_misc_get_display_clock_speed; 9634 i9xx_misc_get_display_clock_speed;
9635 else if (IS_PINEVIEW(dev))
9636 dev_priv->display.get_display_clock_speed =
9637 pnv_get_display_clock_speed;
9611 else if (IS_I915GM(dev)) 9638 else if (IS_I915GM(dev))
9612 dev_priv->display.get_display_clock_speed = 9639 dev_priv->display.get_display_clock_speed =
9613 i915gm_get_display_clock_speed; 9640 i915gm_get_display_clock_speed;