All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Govindapillai, Vinod" <vinod.govindapillai@intel.com>
To: "ville.syrjala@linux.intel.com" <ville.syrjala@linux.intel.com>,
	"intel-gfx@lists.freedesktop.org"
	<intel-gfx@lists.freedesktop.org>
Subject: Re: [Intel-gfx] [PATCH 6/7] drm/i915: Check HPD live state during eDP probe
Date: Fri, 14 Apr 2023 13:03:58 +0000	[thread overview]
Message-ID: <506a2d333765b7fa5dbfffa6811c957184039599.camel@intel.com> (raw)
In-Reply-To: <20230302161013.29213-7-ville.syrjala@linux.intel.com>

On Thu, 2023-03-02 at 18:10 +0200, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> We need to untangle the mess where some SKL machines (at least)
> declare both DDI A and DDI E to be present in their VBT, and
> both using AUX A. DDI A is a ghost eDP, wheres DDI E may be a
> real DP->VGA converter.
> 
> Currently that is handled by checking the VBT child devices
> for conflicts before output probing. But that kind of solution
> will not work for the ADL phantom dual eDP VBTs. I think on
> those we just have to probe the eDP first. And would be nice
> to use the same probe scheme for everything.
> 
> On these SKL systems if we probe DDI A first (which is only
> natural given it's declared by VBT first) we will get an answer
> via AUX, but it came from the DP->VGA converter hooked to the
> DDI E, not DDI A. Thus we mistakenly register eDP on DDI A
> and screw up the real DP device in DDI E.
> 
> To fix this let's check the HPD live state during the eDP probe.
> If we got an answer via DPCD but HPD is still down let's assume
> we got the answer from someone else.
> 
> Smoke tested on all my eDP machines (ilk,hsw-ult,tgl,adl) and
> I also tested turning off all HPD hardware prior to loading
> i915 to make sure it all comes up properly. And I simulated
> the failure path too by not turning on HPD sense and that
> correctly gave up on eDP.
> 
> I *think* Windows might just fully depend on HPD here. I
> couldn't really find any other way they probe displays. And
> I did find code where they also check the live state prior
> to AUX transfers (something Imre and I have also talked
> about perhaps doing). That would also solve this as we'd
> not succeed in the eDP probe DPCD reads.
> 
> Other solutions I've considered:
> 
> - Reintrduce DDI strap checks on SKL. Unfortunately we just
>   don't have any idea how reliable they are on real production
>   hardware, and commit 5a2376d1360b ("drm/i915/skl: WaIgnoreDDIAStrap
>   is forever, always init DDI A") does suggest that not very.
>   Sadly that commit is very poor in details :/
> 
>   Also the systems (Asrock B250M-HDV at least) fixed by commit
>   41e35ffb380b ("drm/i915: Favor last VBT child device with
>   conflicting AUX ch/DDC pin") might still not work since we
>   don't know what their straps indicate. Stupid me for not
>   asking the reporter to check those at the time :(
> 
>   We have currently two CI machines (fi-cfl-guc,fi-cfl-8700k
>   both MS-7B54/Z370M) that also declare both DDI A and DDI E
>   in VBT to use AUX A, and on these the DDI A strap is also
>   set. There doesn't seem to be anything hooked up to either
>   DDI however. But given the DDI A strap is wrong on these it
>   might well be wrong on the Asrock too.
> 
>   Most other CI machines seem to have straps that generally
>   match the VBT. fi-kbl-soraka is an exception though as DDI D
>   strap is not set, but it is declared in VBT as a DP++ port.
>   No idea if there's a real physical port to go with it or not.
> 
> - Some kind of quirk just for the cases where both DDI A and DDI E
>   are present in VBT. Might be feasible given we've ignored
>   DDI A in these cases up to now successfully. But feels rather
>   unsatisfactory, and not very future proof against funny VBTs.
> 
> References: https://bugs.freedesktop.org/show_bug.cgi?id=111966
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---

Reviewed-by: Vinod Govindapillai <vinod.govindapillai@intel.com>

>  drivers/gpu/drm/i915/display/intel_dp.c | 28 +++++++++++++++++++++++++
>  1 file changed, 28 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
> index aee93b0d810e..35b02278d840 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -46,6 +46,7 @@
>  #include "g4x_dp.h"
>  #include "i915_debugfs.h"
>  #include "i915_drv.h"
> +#include "i915_irq.h"
>  #include "i915_reg.h"
>  #include "intel_atomic.h"
>  #include "intel_audio.h"
> @@ -5308,6 +5309,15 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
>                 goto out_vdd_off;
>         }
>  
> +       /*
> +        * Enable HPD sense for live status check.
> +        * intel_hpd_irq_setup() will turn it off again
> +        * if it's no longer needed later.
> +        *
> +        * The DPCD probe below will make sure VDD is on.
> +        */
> +       intel_hpd_enable_detection(encoder);
> +
>         /* Cache DPCD and EDID for edp. */
>         has_dpcd = intel_edp_init_dpcd(intel_dp);
>  
> @@ -5319,6 +5329,24 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
>                 goto out_vdd_off;
>         }
>  
> +       /*
> +        * VBT and straps are liars. Also check HPD as that seems
> +        * to be the most reliable piece of information available.
> +        */
> +       if (!intel_digital_port_connected(encoder)) {
> +               /*
> +                * If this fails, presume the DPCD answer came
> +                * from some other port using the same AUX CH.
> +                *
> +                * FIXME maybe cleaner to check this before the
> +                * DPCD read? Would need sort out the VDD handling...
> +                */
> +               drm_info(&dev_priv->drm,
> +                        "[ENCODER:%d:%s] HPD is down, disabling eDP\n",
> +                        encoder->base.base.id, encoder->base.name);
> +               goto out_vdd_off;
> +       }
> +
>         mutex_lock(&dev_priv->drm.mode_config.mutex);
>         drm_edid = drm_edid_read_ddc(connector, &intel_dp->aux.ddc);
>         if (!drm_edid) {


  reply	other threads:[~2023-04-14 13:04 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-02 16:10 [Intel-gfx] [PATCH 0/7] drm/i915: Check HPD during eDP probe Ville Syrjala
2023-03-02 16:10 ` [Intel-gfx] [PATCH 1/7] drm/i915: Populate dig_port->connected() before connector init Ville Syrjala
2023-03-02 16:10 ` [Intel-gfx] [PATCH 2/7] drm/i915: Fix SKL DDI A digital port .connected() Ville Syrjala
2023-03-02 16:10 ` [Intel-gfx] [PATCH 3/7] drm/i915: Get rid of the gm45 HPD live state nonsense Ville Syrjala
2023-03-02 16:10 ` [Intel-gfx] [PATCH 4/7] drm/i915: Introduce <platform>_hotplug_mask() Ville Syrjala
2023-03-03 16:58   ` [Intel-gfx] [PATCH v2 " Ville Syrjala
2023-04-14 21:56     ` Govindapillai, Vinod
2023-03-02 16:10 ` [Intel-gfx] [PATCH 5/7] drm/i915: Introduce intel_hpd_enable_detection() Ville Syrjala
2023-04-14 12:59   ` Govindapillai, Vinod
2023-04-14 13:23     ` Govindapillai, Vinod
2023-04-14 14:21       ` Ville Syrjälä
2023-04-14 21:43         ` Govindapillai, Vinod
2023-03-02 16:10 ` [Intel-gfx] [PATCH 6/7] drm/i915: Check HPD live state during eDP probe Ville Syrjala
2023-04-14 13:03   ` Govindapillai, Vinod [this message]
2023-03-02 16:10 ` [Intel-gfx] [PATCH 7/7] drm/i915: Reuse <platform>_hotplug_mask() in .hpd_detection_setup() Ville Syrjala
2023-04-14 22:05   ` Govindapillai, Vinod
2023-03-02 16:29 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for drm/i915: Check HPD during eDP probe Patchwork
2023-03-03  4:32 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2023-03-03 14:23 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for drm/i915: Check HPD during eDP probe (rev2) Patchwork
2023-03-03 14:47 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2023-03-03 17:27 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for drm/i915: Check HPD during eDP probe (rev3) Patchwork
2023-03-03 17:54 ` [Intel-gfx] ✗ Fi.CI.BAT: failure " Patchwork
2023-03-03 21:21 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for drm/i915: Check HPD during eDP probe (rev4) Patchwork
2023-03-03 21:49 ` [Intel-gfx] ✗ Fi.CI.BAT: failure " Patchwork
2023-03-03 23:07 ` [Intel-gfx] ✗ Fi.CI.SPARSE: warning for drm/i915: Check HPD during eDP probe (rev5) Patchwork
2023-03-03 23:30 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2023-03-06 14:18 ` [Intel-gfx] ✓ Fi.CI.IGT: success for drm/i915: Check HPD during eDP probe Patchwork
2023-03-06 22:37 ` [Intel-gfx] ✗ Fi.CI.IGT: failure for drm/i915: Check HPD during eDP probe (rev5) Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=506a2d333765b7fa5dbfffa6811c957184039599.camel@intel.com \
    --to=vinod.govindapillai@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=ville.syrjala@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.