On Thu, Oct 13, 2022 at 09:41:21PM +0300, Ville Syrjälä wrote: > On Tue, Oct 11, 2022 at 04:49:35PM +0300, Jani Nikula wrote: > > For normal connector detect, there's really no point in trying dual mode > > detect if the connector is disconnected. We can simplify the detect > > sequence by skipping it. Since intel_hdmi_dp_dual_mode_detect() is only > > called when EDID is present, we can drop the has_edid parameter. > > > > The functional effect is speeding up disconnected connector detection > > ever so slightly, and, combined with firmware EDID, also stop logging > > about assuming dual mode adaptor. > > > > It's a bit subtle, but this will also skip dual mode detect if the > > connector is force connected and a) there's no EDID of any kind, normal > > or override/firmare or b) there's EDID but it does not indicate > > digital. These are corner cases no matter what, and arguably forcing > > should not be limited by dual mode detect. > > > > Cc: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > > Signed-off-by: Jani Nikula <jani.nikula@xxxxxxxxx> > > --- > > drivers/gpu/drm/i915/display/intel_hdmi.c | 17 +++++++---------- > > 1 file changed, 7 insertions(+), 10 deletions(-) > > > > diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c > > index 93519fb23d9d..a332eaac86cd 100644 > > --- a/drivers/gpu/drm/i915/display/intel_hdmi.c > > +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c > > @@ -2355,7 +2355,7 @@ intel_hdmi_unset_edid(struct drm_connector *connector) > > } > > > > static void > > -intel_hdmi_dp_dual_mode_detect(struct drm_connector *connector, bool has_edid) > > +intel_hdmi_dp_dual_mode_detect(struct drm_connector *connector) > > { > > struct drm_i915_private *dev_priv = to_i915(connector->dev); > > struct intel_hdmi *hdmi = intel_attached_hdmi(to_intel_connector(connector)); > > @@ -2371,16 +2371,13 @@ intel_hdmi_dp_dual_mode_detect(struct drm_connector *connector, bool has_edid) > > * CONFIG1 pin, but no such luck on our hardware. > > * > > * The only method left to us is to check the VBT to see > > - * if the port is a dual mode capable DP port. But let's > > - * only do that when we sucesfully read the EDID, to avoid > > - * confusing log messages about DP dual mode adaptors when > > - * there's nothing connected to the port. > > + * if the port is a dual mode capable DP port. > > */ > > if (type == DRM_DP_DUAL_MODE_UNKNOWN) { > > /* An overridden EDID imply that we want this port for testing. > > * Make sure not to set limits for that port. > > */ > > - if (has_edid && !connector->override_edid && > > + if (!connector->override_edid && > > intel_bios_is_port_dp_dual_mode(dev_priv, port)) { > > drm_dbg_kms(&dev_priv->drm, > > "Assuming DP dual mode adaptor presence based on VBT\n"); > > @@ -2435,18 +2432,18 @@ intel_hdmi_set_edid(struct drm_connector *connector) > > intel_gmbus_force_bit(i2c, false); > > } > > > > - intel_hdmi_dp_dual_mode_detect(connector, edid != NULL); > > - > > - intel_display_power_put(dev_priv, POWER_DOMAIN_GMBUS, wakeref); > > - > > to_intel_connector(connector)->detect_edid = edid; > > if (edid && edid->input & DRM_EDID_INPUT_DIGITAL) { > > We didn't have this digital input thing before. What happens with > HDMI->VGA dongles for example? > > Hmm. This whole thing might already be broken on those. I suspect > I've only used my HDMI->VGA dongle on LSPCON machines, so never > noticed this. Need to go plug that thing into a native HDMI port... Except I must have left it elsewhere since I can't find it here. So can't test right now unfortunately. I first thought this digital check thing might be due to the DVI-I shenanigans in intel_crt_detect_ddc(), but that was added for am unspecified gen2 machine in commit f5afcd3dd0dc ("drm/i915/crt: Check for a analog monitor in case of DVI-I") so not even relevant here. And I don't think I've ever seen a g4x+ machine with an actual DVI-I port. commit aa93d632c496 ("drm/i915: Require digital monitor on HDMI ports for detect") is where this check was added, but there is no actual justification for checking the digital thing vs. just making sure the edid read succeeded. So looks to me like this check can just be removed. And if we do come across some real DVI-I use cases we should probably check the VBT DDC pin assignments before we go assuming anything about the wiring. -- Ville Syrjälä Intel