Commit d5dd96cb280993a6096b42ab082f9cfd9c7ae0bd

Authored by Dave Airlie
Committed by Eric Anholt
1 parent 9d0498a2bf

i915: disable DAC on Ironlake also when doing CRT load detection.

Like on Sandybridge, disabling the DAC here when doing CRT load detect
avoids forever hangs waiting on the hardware.

test procedure on HP 2740p:
boot with no VGA plugged in, start X,
plug in VGA monitor (1280x1024)
chvt 3
machine hangs waiting forever.

Signed-off-by: Dave Airlie <airlied@redhat.com>
Signed-off-by: Eric Anholt <eric@anholt.net>

Showing 1 changed file with 12 additions and 11 deletions Side-by-side Diff

drivers/gpu/drm/i915/intel_crt.c
... ... @@ -160,20 +160,21 @@
160 160 struct drm_i915_private *dev_priv = dev->dev_private;
161 161 u32 adpa, temp;
162 162 bool ret;
  163 + bool turn_off_dac = false;
163 164  
164 165 temp = adpa = I915_READ(PCH_ADPA);
165 166  
166   - if (HAS_PCH_CPT(dev)) {
167   - /* Disable DAC before force detect */
168   - I915_WRITE(PCH_ADPA, adpa & ~ADPA_DAC_ENABLE);
169   - (void)I915_READ(PCH_ADPA);
170   - } else {
171   - adpa &= ~ADPA_CRT_HOTPLUG_MASK;
172   - /* disable HPD first */
173   - I915_WRITE(PCH_ADPA, adpa);
174   - (void)I915_READ(PCH_ADPA);
175   - }
  167 + if (HAS_PCH_SPLIT(dev))
  168 + turn_off_dac = true;
176 169  
  170 + adpa &= ~ADPA_CRT_HOTPLUG_MASK;
  171 + if (turn_off_dac)
  172 + adpa &= ~ADPA_DAC_ENABLE;
  173 +
  174 + /* disable HPD first */
  175 + I915_WRITE(PCH_ADPA, adpa);
  176 + (void)I915_READ(PCH_ADPA);
  177 +
177 178 adpa |= (ADPA_CRT_HOTPLUG_PERIOD_128 |
178 179 ADPA_CRT_HOTPLUG_WARMUP_10MS |
179 180 ADPA_CRT_HOTPLUG_SAMPLE_4S |
... ... @@ -189,7 +190,7 @@
189 190 1000, 1))
190 191 DRM_ERROR("timed out waiting for FORCE_TRIGGER");
191 192  
192   - if (HAS_PCH_CPT(dev)) {
  193 + if (turn_off_dac) {
193 194 I915_WRITE(PCH_ADPA, temp);
194 195 (void)I915_READ(PCH_ADPA);
195 196 }