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 2520 sr_entries = roundup(sr_entries / cacheline_size, 1); 2521 2521 DRM_DEBUG("self-refresh entries: %d\n", sr_entries); 2522 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); 2523 2527 } 2524 2528 2525 2529 DRM_DEBUG("Setting FIFO watermarks - A: %d, B: %d, SR %d\n", ··· 2567 2563 srwm = 1; 2568 2564 srwm &= 0x3f; 2569 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 2570 } 2571 2571 2572 2572 DRM_DEBUG_KMS("Setting FIFO watermarks - A: 8, B: 8, C: 8, SR %d\n", ··· 2639 2631 if (srwm < 0) 2640 2632 srwm = 1; 2641 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); 2642 2638 } 2643 2639 2644 2640 DRM_DEBUG_KMS("Setting FIFO watermarks - A: %d, B: %d, C: %d, SR %d\n",