[Intel-gfx] A wrong DDI encoder override from HDMI to DP at hotplug
Takashi Iwai
tiwai at suse.de
Wed Nov 18 08:00:57 PST 2015
On Wed, 18 Nov 2015 16:38:03 +0100,
Ville Syrjälä wrote:
>
> On Wed, Nov 18, 2015 at 04:23:06PM +0100, Takashi Iwai wrote:
> > Hi,
> >
> > currently a DDI port may register both DP and HDMI and it shares the
> > same encoder. The bug we've got a report is about this encoder type:
> > namely, a machine using DDI port D for HDMI is screwed up because the
> > encoder is switched to DP suddently. The details are found in:
> > http://bugzilla.opensuse.org/show_bug.cgi?id=955190
> >
> > The problem happens in intel_dp_hpd_pulse(). Since the machine
> > declares both DP and HDMI, the driver registers this callback. And at
> > a hotplug event, the function changes the encoder type like:
> >
> > if (intel_dig_port->base.type != INTEL_OUTPUT_EDP)
> > intel_dig_port->base.type = INTEL_OUTPUT_DISPLAYPORT;
> >
> > After this point, the encoder is handled as DP although the same HDMI
> > monitor is connected.
> >
> > Changing this to exclude INTEL_OUTPUT_HDMI makes the thing working in
> > the bug report above, but I'm not sure what's the right fix.
> >
> > Any suggestions?
>
> This has been causing all sorts of troubles for years. I've suggested
> several times that we should just split the encoder into two, like we
> have for older platforms, but no one has taken the bait thus far.
>
> This particular piece of code to change the encoder type in the
> hpd_pulse hook came about with the mst code drop from Dave IIRC. At
> least I never figured out what it's trying to do since -ENOCOMMENT.
Yeah, this was introduced in the commit
0e32b39ceed665bfa4a77a4bc307b6652b991632
drm/i915: add DP 1.2 MST support (v0.7)
so the problem exists for quite some time, since 3.17 kernel.
I guess the patch just overlooked the DDI use case with HDMI.
Maybe the code was meant like below?
if (intel_dig_port->base.type == INTEL_OUTPUT_UNKNOWN ||
intel_dig_port->base.type == INTEL_OUTPUT_DP_MST)
intel_dig_port->base.type = INTEL_OUTPUT_DISPLAYPORT;
thanks,
Takashi
More information about the Intel-gfx
mailing list