Commit 3f7c447f authored by Paulo Zanoni's avatar Paulo Zanoni Committed by Daniel Vetter

drm/i915: fix pipe DDI mode select

Mask the value before changing it and also select DVI when needed.

DVI was working in cases where the BIOS was setting the correct value
because we were not masking the value before changing it.
Signed-off-by: default avatarPaulo Zanoni <paulo.r.zanoni@intel.com>
Reviewed-by: default avatarJani Nikula <jani.nikula@intel.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent c96ea64e
...@@ -4302,6 +4302,7 @@ ...@@ -4302,6 +4302,7 @@
/* Those bits are ignored by pipe EDP since it can only connect to DDI A */ /* Those bits are ignored by pipe EDP since it can only connect to DDI A */
#define PIPE_DDI_PORT_MASK (7<<28) #define PIPE_DDI_PORT_MASK (7<<28)
#define PIPE_DDI_SELECT_PORT(x) ((x)<<28) #define PIPE_DDI_SELECT_PORT(x) ((x)<<28)
#define PIPE_DDI_MODE_SELECT_MASK (7<<24)
#define PIPE_DDI_MODE_SELECT_HDMI (0<<24) #define PIPE_DDI_MODE_SELECT_HDMI (0<<24)
#define PIPE_DDI_MODE_SELECT_DVI (1<<24) #define PIPE_DDI_MODE_SELECT_DVI (1<<24)
#define PIPE_DDI_MODE_SELECT_DP_SST (2<<24) #define PIPE_DDI_MODE_SELECT_DP_SST (2<<24)
......
...@@ -726,13 +726,18 @@ void intel_ddi_mode_set(struct drm_encoder *encoder, ...@@ -726,13 +726,18 @@ void intel_ddi_mode_set(struct drm_encoder *encoder,
temp = I915_READ(DDI_FUNC_CTL(pipe)); temp = I915_READ(DDI_FUNC_CTL(pipe));
temp &= ~PIPE_DDI_PORT_MASK; temp &= ~PIPE_DDI_PORT_MASK;
temp &= ~PIPE_DDI_BPC_12; temp &= ~PIPE_DDI_BPC_12;
temp &= ~PIPE_DDI_MODE_SELECT_MASK;
temp |= PIPE_DDI_SELECT_PORT(port) | temp |= PIPE_DDI_SELECT_PORT(port) |
PIPE_DDI_MODE_SELECT_HDMI |
((intel_crtc->bpp > 24) ? ((intel_crtc->bpp > 24) ?
PIPE_DDI_BPC_12 : PIPE_DDI_BPC_12 :
PIPE_DDI_BPC_8) | PIPE_DDI_BPC_8) |
PIPE_DDI_FUNC_ENABLE; PIPE_DDI_FUNC_ENABLE;
if (intel_hdmi->has_hdmi_sink)
temp |= PIPE_DDI_MODE_SELECT_HDMI;
else
temp |= PIPE_DDI_MODE_SELECT_DVI;
I915_WRITE(DDI_FUNC_CTL(pipe), temp); I915_WRITE(DDI_FUNC_CTL(pipe), temp);
intel_hdmi->set_infoframes(encoder, adjusted_mode); intel_hdmi->set_infoframes(encoder, adjusted_mode);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment