aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2013-12-14 17:38:30 -0500
committerDaniel Vetter <daniel.vetter@ffwll.ch>2014-01-10 11:54:20 -0500
commitfeb56b934463a7339ebc3c3cf2497c7958fe5a60 (patch)
tree062f100aa6210fc9891c05c3cddc6e7924526bf0 /drivers/gpu/drm/i915
parent3a77c4c441d2bcc2b1e27d8aabee0c57aed66ed3 (diff)
drm/i915: i830M has watermarks like i855
So shuffle the checks around a bit. Also give all the structs and functions proper prefixes: i830_ for the dual-pipe mobile platforms and i845_ for the two single-pipe desktop platforms. Note that the max fifo value isn't actually correct for the i830M, but since we don't frob the fifo split we don't actually need it. This is different for some gen3 devices where we need the full fifo for self refresh mode. Cc: Thomas Richter <richter@rus.uni-stuttgart.de> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@gmail.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915')
-rw-r--r--drivers/gpu/drm/i915/intel_pm.c53
1 files changed, 19 insertions, 34 deletions
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index 26e6d1b5363f..fca20e4992e1 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -824,7 +824,7 @@ static int i9xx_get_fifo_size(struct drm_device *dev, int plane)
824 return size; 824 return size;
825} 825}
826 826
827static int i85x_get_fifo_size(struct drm_device *dev, int plane) 827static int i830_get_fifo_size(struct drm_device *dev, int plane)
828{ 828{
829 struct drm_i915_private *dev_priv = dev->dev_private; 829 struct drm_i915_private *dev_priv = dev->dev_private;
830 uint32_t dsparb = I915_READ(DSPARB); 830 uint32_t dsparb = I915_READ(DSPARB);
@@ -857,21 +857,6 @@ static int i845_get_fifo_size(struct drm_device *dev, int plane)
857 return size; 857 return size;
858} 858}
859 859
860static int i830_get_fifo_size(struct drm_device *dev, int plane)
861{
862 struct drm_i915_private *dev_priv = dev->dev_private;
863 uint32_t dsparb = I915_READ(DSPARB);
864 int size;
865
866 size = dsparb & 0x7f;
867 size >>= 1; /* Convert to cachelines */
868
869 DRM_DEBUG_KMS("FIFO size - (0x%08x) %s: %d\n", dsparb,
870 plane ? "B" : "A", size);
871
872 return size;
873}
874
875/* Pineview has different values for various configs */ 860/* Pineview has different values for various configs */
876static const struct intel_watermark_params pineview_display_wm = { 861static const struct intel_watermark_params pineview_display_wm = {
877 PINEVIEW_DISPLAY_FIFO, 862 PINEVIEW_DISPLAY_FIFO,
@@ -950,14 +935,14 @@ static const struct intel_watermark_params i915_wm_info = {
950 2, 935 2,
951 I915_FIFO_LINE_SIZE 936 I915_FIFO_LINE_SIZE
952}; 937};
953static const struct intel_watermark_params i855_wm_info = { 938static const struct intel_watermark_params i830_wm_info = {
954 I855GM_FIFO_SIZE, 939 I855GM_FIFO_SIZE,
955 I915_MAX_WM, 940 I915_MAX_WM,
956 1, 941 1,
957 2, 942 2,
958 I830_FIFO_LINE_SIZE 943 I830_FIFO_LINE_SIZE
959}; 944};
960static const struct intel_watermark_params i830_wm_info = { 945static const struct intel_watermark_params i845_wm_info = {
961 I830_FIFO_SIZE, 946 I830_FIFO_SIZE,
962 I915_MAX_WM, 947 I915_MAX_WM,
963 1, 948 1,
@@ -1515,7 +1500,7 @@ static void i9xx_update_wm(struct drm_crtc *unused_crtc)
1515 else if (!IS_GEN2(dev)) 1500 else if (!IS_GEN2(dev))
1516 wm_info = &i915_wm_info; 1501 wm_info = &i915_wm_info;
1517 else 1502 else
1518 wm_info = &i855_wm_info; 1503 wm_info = &i830_wm_info;
1519 1504
1520 fifo_size = dev_priv->display.get_fifo_size(dev, 0); 1505 fifo_size = dev_priv->display.get_fifo_size(dev, 0);
1521 crtc = intel_get_crtc_for_plane(dev, 0); 1506 crtc = intel_get_crtc_for_plane(dev, 0);
@@ -1622,7 +1607,7 @@ static void i9xx_update_wm(struct drm_crtc *unused_crtc)
1622 } 1607 }
1623} 1608}
1624 1609
1625static void i830_update_wm(struct drm_crtc *unused_crtc) 1610static void i845_update_wm(struct drm_crtc *unused_crtc)
1626{ 1611{
1627 struct drm_device *dev = unused_crtc->dev; 1612 struct drm_device *dev = unused_crtc->dev;
1628 struct drm_i915_private *dev_priv = dev->dev_private; 1613 struct drm_i915_private *dev_priv = dev->dev_private;
@@ -1637,7 +1622,7 @@ static void i830_update_wm(struct drm_crtc *unused_crtc)
1637 1622
1638 adjusted_mode = &to_intel_crtc(crtc)->config.adjusted_mode; 1623 adjusted_mode = &to_intel_crtc(crtc)->config.adjusted_mode;
1639 planea_wm = intel_calculate_wm(adjusted_mode->crtc_clock, 1624 planea_wm = intel_calculate_wm(adjusted_mode->crtc_clock,
1640 &i830_wm_info, 1625 &i845_wm_info,
1641 dev_priv->display.get_fifo_size(dev, 0), 1626 dev_priv->display.get_fifo_size(dev, 0),
1642 4, latency_ns); 1627 4, latency_ns);
1643 fwater_lo = I915_READ(FW_BLC) & ~0xfff; 1628 fwater_lo = I915_READ(FW_BLC) & ~0xfff;
@@ -5628,21 +5613,21 @@ void intel_init_pm(struct drm_device *dev)
5628 dev_priv->display.update_wm = i9xx_update_wm; 5613 dev_priv->display.update_wm = i9xx_update_wm;
5629 dev_priv->display.get_fifo_size = i9xx_get_fifo_size; 5614 dev_priv->display.get_fifo_size = i9xx_get_fifo_size;
5630 dev_priv->display.init_clock_gating = gen3_init_clock_gating; 5615 dev_priv->display.init_clock_gating = gen3_init_clock_gating;
5631 } else if (IS_I865G(dev)) { 5616 } else if (IS_GEN2(dev)) {
5632 dev_priv->display.update_wm = i830_update_wm; 5617 if (INTEL_INFO(dev)->num_pipes == 1) {
5633 dev_priv->display.init_clock_gating = i85x_init_clock_gating; 5618 dev_priv->display.update_wm = i845_update_wm;
5634 dev_priv->display.get_fifo_size = i830_get_fifo_size;
5635 } else if (IS_I85X(dev)) {
5636 dev_priv->display.update_wm = i9xx_update_wm;
5637 dev_priv->display.get_fifo_size = i85x_get_fifo_size;
5638 dev_priv->display.init_clock_gating = i85x_init_clock_gating;
5639 } else {
5640 dev_priv->display.update_wm = i830_update_wm;
5641 dev_priv->display.init_clock_gating = i830_init_clock_gating;
5642 if (IS_845G(dev))
5643 dev_priv->display.get_fifo_size = i845_get_fifo_size; 5619 dev_priv->display.get_fifo_size = i845_get_fifo_size;
5644 else 5620 } else {
5621 dev_priv->display.update_wm = i9xx_update_wm;
5645 dev_priv->display.get_fifo_size = i830_get_fifo_size; 5622 dev_priv->display.get_fifo_size = i830_get_fifo_size;
5623 }
5624
5625 if (IS_I85X(dev) || IS_I865G(dev))
5626 dev_priv->display.init_clock_gating = i85x_init_clock_gating;
5627 else
5628 dev_priv->display.init_clock_gating = i830_init_clock_gating;
5629 } else {
5630 DRM_ERROR("unexpected fall-through in intel_init_pm\n");
5646 } 5631 }
5647} 5632}
5648 5633