drm/i915: Disable SR when more than one pipe is enabled

Self Refresh should be disabled on dual plane configs. Otherwise, as
the SR watermark is not calculated for such configs, switching to non
VGA mode causes FIFO underrun and display flicker.

This fixes Korg Bug #14897.

Signed-off-by: David John <davidjon@xenontk.org>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Cc: stable@kernel.org
Signed-off-by: Eric Anholt <eric@anholt.net>

authored by David John and committed by Eric Anholt 33c5fd12 013d5aa2

+12
+12
drivers/gpu/drm/i915/intel_display.c
··· 2520 sr_entries = roundup(sr_entries / cacheline_size, 1); 2521 DRM_DEBUG("self-refresh entries: %d\n", sr_entries); 2522 I915_WRITE(FW_BLC_SELF, FW_BLC_SELF_EN); 2523 } 2524 2525 DRM_DEBUG("Setting FIFO watermarks - A: %d, B: %d, SR %d\n", ··· 2567 srwm = 1; 2568 srwm &= 0x3f; 2569 I915_WRITE(FW_BLC_SELF, FW_BLC_SELF_EN); 2570 } 2571 2572 DRM_DEBUG_KMS("Setting FIFO watermarks - A: 8, B: 8, C: 8, SR %d\n", ··· 2639 if (srwm < 0) 2640 srwm = 1; 2641 I915_WRITE(FW_BLC_SELF, FW_BLC_SELF_EN | (srwm & 0x3f)); 2642 } 2643 2644 DRM_DEBUG_KMS("Setting FIFO watermarks - A: %d, B: %d, C: %d, SR %d\n",
··· 2520 sr_entries = roundup(sr_entries / cacheline_size, 1); 2521 DRM_DEBUG("self-refresh entries: %d\n", sr_entries); 2522 I915_WRITE(FW_BLC_SELF, FW_BLC_SELF_EN); 2523 + } else { 2524 + /* Turn off self refresh if both pipes are enabled */ 2525 + I915_WRITE(FW_BLC_SELF, I915_READ(FW_BLC_SELF) 2526 + & ~FW_BLC_SELF_EN); 2527 } 2528 2529 DRM_DEBUG("Setting FIFO watermarks - A: %d, B: %d, SR %d\n", ··· 2563 srwm = 1; 2564 srwm &= 0x3f; 2565 I915_WRITE(FW_BLC_SELF, FW_BLC_SELF_EN); 2566 + } else { 2567 + /* Turn off self refresh if both pipes are enabled */ 2568 + I915_WRITE(FW_BLC_SELF, I915_READ(FW_BLC_SELF) 2569 + & ~FW_BLC_SELF_EN); 2570 } 2571 2572 DRM_DEBUG_KMS("Setting FIFO watermarks - A: 8, B: 8, C: 8, SR %d\n", ··· 2631 if (srwm < 0) 2632 srwm = 1; 2633 I915_WRITE(FW_BLC_SELF, FW_BLC_SELF_EN | (srwm & 0x3f)); 2634 + } else { 2635 + /* Turn off self refresh if both pipes are enabled */ 2636 + I915_WRITE(FW_BLC_SELF, I915_READ(FW_BLC_SELF) 2637 + & ~FW_BLC_SELF_EN); 2638 } 2639 2640 DRM_DEBUG_KMS("Setting FIFO watermarks - A: %d, B: %d, C: %d, SR %d\n",