drm/i915: implement IBX hdmi transcoder select workaround
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Tue, 5 Jun 2012 09:03:39 +0000 (11:03 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Wed, 6 Jun 2012 07:25:13 +0000 (09:25 +0200)
commit7a87c289778c5ee7ef79be5fba27e081383a30f3
tree6c0c0f55caea41f53283675ea67dede511d1dd73
parent1523c310b3ed964b71a8db16f70c3bc21cc0642e
drm/i915: implement IBX hdmi transcoder select workaround

Bspec Vol 3, Part 3, Section 3.8.1.1, bit 30:

"[DevIBX] Writing to this bit only takes effect when port is enabled.
Due to hardware issue it is required that this bit be cleared when port
is disabled. To clear this bit software must temporarily enable this
port on transcoder A."

Unfortunately the public Bspec misses totally out on the same language
for HDMIB. Internal Bspec also mentions that one of the bad
side-effects is that DPx can fail to light up on transcoder A if HDMIx
is disabled but using transcoder B.

I've found this while reviewing Bsepc. We already implement the same
workaround for the DP ports.

Also replace a magic 1 with PIPE_B I've found while looking through the
code.

v2: Implement suggestions from Chris Wilson:
- add pipe variable to cut down on code noise
- write the reg value twice to w/a hw issues (Bspec is unclear on
  which bit actually require the write twice stuff, but better be
  paranoid about it)
- untangle the if logic

Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/intel_hdmi.c