diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2012-10-22 07:32:15 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2012-11-11 17:51:46 -0500 |
commit | b9e0bda3cd325b55f336efb751736163f62abded (patch) | |
tree | 495687ba8ac9ec30ee4bfd04e478f87525fafe94 | |
parent | ccdf56cdb2a4d6103eb6627494d6cd34edb1c2ea (diff) |
drm/i915: Always calculate 8xx WM values based on a 32-bpp framebuffer
The specs for gen2 say that the watermark values "should always be set
assuming a 32bpp display mode, even though the display mode may be 15 or
16 bpp."
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r-- | drivers/gpu/drm/i915/intel_pm.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c index 8f1561616bfb..0cbc0e6402b4 100644 --- a/drivers/gpu/drm/i915/intel_pm.c +++ b/drivers/gpu/drm/i915/intel_pm.c | |||
@@ -1468,9 +1468,12 @@ static void i9xx_update_wm(struct drm_device *dev) | |||
1468 | fifo_size = dev_priv->display.get_fifo_size(dev, 0); | 1468 | fifo_size = dev_priv->display.get_fifo_size(dev, 0); |
1469 | crtc = intel_get_crtc_for_plane(dev, 0); | 1469 | crtc = intel_get_crtc_for_plane(dev, 0); |
1470 | if (crtc->enabled && crtc->fb) { | 1470 | if (crtc->enabled && crtc->fb) { |
1471 | int cpp = crtc->fb->bits_per_pixel / 8; | ||
1472 | if (IS_GEN2(dev)) | ||
1473 | cpp = 4; | ||
1474 | |||
1471 | planea_wm = intel_calculate_wm(crtc->mode.clock, | 1475 | planea_wm = intel_calculate_wm(crtc->mode.clock, |
1472 | wm_info, fifo_size, | 1476 | wm_info, fifo_size, cpp, |
1473 | crtc->fb->bits_per_pixel / 8, | ||
1474 | latency_ns); | 1477 | latency_ns); |
1475 | enabled = crtc; | 1478 | enabled = crtc; |
1476 | } else | 1479 | } else |
@@ -1479,9 +1482,12 @@ static void i9xx_update_wm(struct drm_device *dev) | |||
1479 | fifo_size = dev_priv->display.get_fifo_size(dev, 1); | 1482 | fifo_size = dev_priv->display.get_fifo_size(dev, 1); |
1480 | crtc = intel_get_crtc_for_plane(dev, 1); | 1483 | crtc = intel_get_crtc_for_plane(dev, 1); |
1481 | if (crtc->enabled && crtc->fb) { | 1484 | if (crtc->enabled && crtc->fb) { |
1485 | int cpp = crtc->fb->bits_per_pixel / 8; | ||
1486 | if (IS_GEN2(dev)) | ||
1487 | cpp = 4; | ||
1488 | |||
1482 | planeb_wm = intel_calculate_wm(crtc->mode.clock, | 1489 | planeb_wm = intel_calculate_wm(crtc->mode.clock, |
1483 | wm_info, fifo_size, | 1490 | wm_info, fifo_size, cpp, |
1484 | crtc->fb->bits_per_pixel / 8, | ||
1485 | latency_ns); | 1491 | latency_ns); |
1486 | if (enabled == NULL) | 1492 | if (enabled == NULL) |
1487 | enabled = crtc; | 1493 | enabled = crtc; |
@@ -1571,8 +1577,7 @@ static void i830_update_wm(struct drm_device *dev) | |||
1571 | 1577 | ||
1572 | planea_wm = intel_calculate_wm(crtc->mode.clock, &i830_wm_info, | 1578 | planea_wm = intel_calculate_wm(crtc->mode.clock, &i830_wm_info, |
1573 | dev_priv->display.get_fifo_size(dev, 0), | 1579 | dev_priv->display.get_fifo_size(dev, 0), |
1574 | crtc->fb->bits_per_pixel / 8, | 1580 | 4, latency_ns); |
1575 | latency_ns); | ||
1576 | fwater_lo = I915_READ(FW_BLC) & ~0xfff; | 1581 | fwater_lo = I915_READ(FW_BLC) & ~0xfff; |
1577 | fwater_lo |= (3<<8) | planea_wm; | 1582 | fwater_lo |= (3<<8) | planea_wm; |
1578 | 1583 | ||