All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Lyude Paul <lyude@redhat.com>
Cc: intel-gfx@lists.freedesktop.org,
	Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>,
	Laura Abbott <labbott@redhat.com>,
	stable@vger.kernel.org, Jani Nikula <jani.nikula@linux.intel.com>,
	Joonas Lahtinen <joonas.lahtinen@linux.intel.com>,
	Rodrigo Vivi <rodrigo.vivi@intel.com>,
	David Airlie <airlied@linux.ie>,
	dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] drm/i915/dp: Send DPCD ON for MST before phy_up
Date: Thu, 5 Apr 2018 19:38:53 +0300	[thread overview]
Message-ID: <20180405163853.GK5453@intel.com> (raw)
In-Reply-To: <20180404232721.28044-1-lyude@redhat.com>

On Wed, Apr 04, 2018 at 07:27:21PM -0400, Lyude Paul wrote:
> As it turns out, the aux block being off was not the real problem here,
> as transition from D3 to D0 is mandated by the DP spec to take a maximum
> of 1ms, whereas we're allowed a 100ms timeframe to respond to ESI irqs.
> The real problem here is a bit more subtle.
> 
> When doing a modeset where the problem of the sink timing out to our
> sideband requests when transitioning from D3 to D0 occurs, the timeout
> is from the aux block not coming on. However, nothing else times out
> other than the initial phy_up message because the DPCD on call in
> intel_ddi_enable_dp() ends up waking up the AUX block on the hub, not
> the phy_up sideband message. This means that the real fix we need is to
> use the DPMS on before sending a phy_up to ensure that the hub is ready
> to accept sideband messages.
> 
> Signed-off-by: Lyude Paul <lyude@redhat.com>
> Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Cc: Laura Abbott <labbott@redhat.com>
> Cc: stable@vger.kernel.org
> Fixes: ad260ab32a4d9 ("drm/i915/dp: Write to SET_POWER dpcd to enable MST hub.")
> ---
>  drivers/gpu/drm/i915/intel_ddi.c    | 6 +++++-
>  drivers/gpu/drm/i915/intel_dp_mst.c | 1 +
>  2 files changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
> index a6672a9abd85..9bd675f73f7b 100644
> --- a/drivers/gpu/drm/i915/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/intel_ddi.c
> @@ -2324,7 +2324,11 @@ static void intel_ddi_pre_enable_dp(struct intel_encoder *encoder,
>  		intel_prepare_dp_ddi_buffers(encoder, crtc_state);
>  
>  	intel_ddi_init_dp_buf_reg(encoder);
> -	intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON);
> +	/* for MST, we do DPMS_ON outside of here so that DPMS_ON can happen
> +	 * before drm_dp_send_power_updown_phy()
> +	 */
> +	if (!intel_dp->is_mst)

Just 'is_mst' should do here.

And in general I'd like to see the enable and disable paths remain
symmetric. Ie. also move out the dpms call in the disable path (or
maybe move the phy_power_up/down in?).

> +		intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON);
>  	intel_dp_start_link_train(intel_dp);
>  	if (port != PORT_A || INTEL_GEN(dev_priv) >= 9)
>  		intel_dp_stop_link_train(intel_dp);
> diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
> index c3de0918ee13..eff9a4eae1f0 100644
> --- a/drivers/gpu/drm/i915/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/intel_dp_mst.c
> @@ -223,6 +223,7 @@ static void intel_mst_pre_enable_dp(struct intel_encoder *encoder,
>  
>  	DRM_DEBUG_KMS("active links %d\n", intel_dp->active_mst_links);
>  
> +	intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON);
>  	drm_dp_send_power_updown_phy(&intel_dp->mst_mgr, connector->port, true);

This could use a comment to remind people that the order does matter.

>  	if (intel_dp->active_mst_links == 0)
>  		intel_dig_port->base.pre_enable(&intel_dig_port->base,
> -- 
> 2.14.3

-- 
Ville Syrjälä
Intel OTC

WARNING: multiple messages have this Message-ID (diff)
From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Lyude Paul <lyude@redhat.com>
Cc: intel-gfx@lists.freedesktop.org,
	Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>,
	Laura Abbott <labbott@redhat.com>,
	stable@vger.kernel.org, Jani Nikula <jani.nikula@linux.intel.com>,
	Joonas Lahtinen <joonas.lahtinen@linux.intel.com>,
	Rodrigo Vivi <rodrigo.vivi@intel.com>,
	David Airlie <airlied@linux.ie>,
	dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] drm/i915/dp: Send DPCD ON for MST before phy_up
Date: Thu, 5 Apr 2018 19:38:53 +0300	[thread overview]
Message-ID: <20180405163853.GK5453@intel.com> (raw)
In-Reply-To: <20180404232721.28044-1-lyude@redhat.com>

On Wed, Apr 04, 2018 at 07:27:21PM -0400, Lyude Paul wrote:
> As it turns out, the aux block being off was not the real problem here,
> as transition from D3 to D0 is mandated by the DP spec to take a maximum
> of 1ms, whereas we're allowed a 100ms timeframe to respond to ESI irqs.
> The real problem here is a bit more subtle.
> 
> When doing a modeset where the problem of the sink timing out to our
> sideband requests when transitioning from D3 to D0 occurs, the timeout
> is from the aux block not coming on. However, nothing else times out
> other than the initial phy_up message because the DPCD on call in
> intel_ddi_enable_dp() ends up waking up the AUX block on the hub, not
> the phy_up sideband message. This means that the real fix we need is to
> use the DPMS on before sending a phy_up to ensure that the hub is ready
> to accept sideband messages.
> 
> Signed-off-by: Lyude Paul <lyude@redhat.com>
> Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> Cc: Ville Syrj�l� <ville.syrjala@linux.intel.com>
> Cc: Laura Abbott <labbott@redhat.com>
> Cc: stable@vger.kernel.org
> Fixes: ad260ab32a4d9 ("drm/i915/dp: Write to SET_POWER dpcd to enable MST hub.")
> ---
>  drivers/gpu/drm/i915/intel_ddi.c    | 6 +++++-
>  drivers/gpu/drm/i915/intel_dp_mst.c | 1 +
>  2 files changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
> index a6672a9abd85..9bd675f73f7b 100644
> --- a/drivers/gpu/drm/i915/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/intel_ddi.c
> @@ -2324,7 +2324,11 @@ static void intel_ddi_pre_enable_dp(struct intel_encoder *encoder,
>  		intel_prepare_dp_ddi_buffers(encoder, crtc_state);
>  
>  	intel_ddi_init_dp_buf_reg(encoder);
> -	intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON);
> +	/* for MST, we do DPMS_ON outside of here so that DPMS_ON can happen
> +	 * before drm_dp_send_power_updown_phy()
> +	 */
> +	if (!intel_dp->is_mst)

Just 'is_mst' should do here.

And in general I'd like to see the enable and disable paths remain
symmetric. Ie. also move out the dpms call in the disable path (or
maybe move the phy_power_up/down in?).

> +		intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON);
>  	intel_dp_start_link_train(intel_dp);
>  	if (port != PORT_A || INTEL_GEN(dev_priv) >= 9)
>  		intel_dp_stop_link_train(intel_dp);
> diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
> index c3de0918ee13..eff9a4eae1f0 100644
> --- a/drivers/gpu/drm/i915/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/intel_dp_mst.c
> @@ -223,6 +223,7 @@ static void intel_mst_pre_enable_dp(struct intel_encoder *encoder,
>  
>  	DRM_DEBUG_KMS("active links %d\n", intel_dp->active_mst_links);
>  
> +	intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON);
>  	drm_dp_send_power_updown_phy(&intel_dp->mst_mgr, connector->port, true);

This could use a comment to remind people that the order does matter.

>  	if (intel_dp->active_mst_links == 0)
>  		intel_dig_port->base.pre_enable(&intel_dig_port->base,
> -- 
> 2.14.3

-- 
Ville Syrj�l�
Intel OTC

WARNING: multiple messages have this Message-ID (diff)
From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Lyude Paul <lyude@redhat.com>
Cc: dri-devel@lists.freedesktop.org, David Airlie <airlied@linux.ie>,
	intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org,
	Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>,
	Rodrigo Vivi <rodrigo.vivi@intel.com>,
	stable@vger.kernel.org
Subject: Re: [PATCH] drm/i915/dp: Send DPCD ON for MST before phy_up
Date: Thu, 5 Apr 2018 19:38:53 +0300	[thread overview]
Message-ID: <20180405163853.GK5453@intel.com> (raw)
In-Reply-To: <20180404232721.28044-1-lyude@redhat.com>

On Wed, Apr 04, 2018 at 07:27:21PM -0400, Lyude Paul wrote:
> As it turns out, the aux block being off was not the real problem here,
> as transition from D3 to D0 is mandated by the DP spec to take a maximum
> of 1ms, whereas we're allowed a 100ms timeframe to respond to ESI irqs.
> The real problem here is a bit more subtle.
> 
> When doing a modeset where the problem of the sink timing out to our
> sideband requests when transitioning from D3 to D0 occurs, the timeout
> is from the aux block not coming on. However, nothing else times out
> other than the initial phy_up message because the DPCD on call in
> intel_ddi_enable_dp() ends up waking up the AUX block on the hub, not
> the phy_up sideband message. This means that the real fix we need is to
> use the DPMS on before sending a phy_up to ensure that the hub is ready
> to accept sideband messages.
> 
> Signed-off-by: Lyude Paul <lyude@redhat.com>
> Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Cc: Laura Abbott <labbott@redhat.com>
> Cc: stable@vger.kernel.org
> Fixes: ad260ab32a4d9 ("drm/i915/dp: Write to SET_POWER dpcd to enable MST hub.")
> ---
>  drivers/gpu/drm/i915/intel_ddi.c    | 6 +++++-
>  drivers/gpu/drm/i915/intel_dp_mst.c | 1 +
>  2 files changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
> index a6672a9abd85..9bd675f73f7b 100644
> --- a/drivers/gpu/drm/i915/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/intel_ddi.c
> @@ -2324,7 +2324,11 @@ static void intel_ddi_pre_enable_dp(struct intel_encoder *encoder,
>  		intel_prepare_dp_ddi_buffers(encoder, crtc_state);
>  
>  	intel_ddi_init_dp_buf_reg(encoder);
> -	intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON);
> +	/* for MST, we do DPMS_ON outside of here so that DPMS_ON can happen
> +	 * before drm_dp_send_power_updown_phy()
> +	 */
> +	if (!intel_dp->is_mst)

Just 'is_mst' should do here.

And in general I'd like to see the enable and disable paths remain
symmetric. Ie. also move out the dpms call in the disable path (or
maybe move the phy_power_up/down in?).

> +		intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON);
>  	intel_dp_start_link_train(intel_dp);
>  	if (port != PORT_A || INTEL_GEN(dev_priv) >= 9)
>  		intel_dp_stop_link_train(intel_dp);
> diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
> index c3de0918ee13..eff9a4eae1f0 100644
> --- a/drivers/gpu/drm/i915/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/intel_dp_mst.c
> @@ -223,6 +223,7 @@ static void intel_mst_pre_enable_dp(struct intel_encoder *encoder,
>  
>  	DRM_DEBUG_KMS("active links %d\n", intel_dp->active_mst_links);
>  
> +	intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON);
>  	drm_dp_send_power_updown_phy(&intel_dp->mst_mgr, connector->port, true);

This could use a comment to remind people that the order does matter.

>  	if (intel_dp->active_mst_links == 0)
>  		intel_dig_port->base.pre_enable(&intel_dig_port->base,
> -- 
> 2.14.3

-- 
Ville Syrjälä
Intel OTC
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

  reply	other threads:[~2018-04-05 16:39 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-04 23:27 [PATCH] drm/i915/dp: Send DPCD ON for MST before phy_up Lyude Paul
2018-04-04 23:27 ` Lyude Paul
2018-04-05 16:38 ` Ville Syrjälä [this message]
2018-04-05 16:38   ` Ville Syrjälä
2018-04-05 16:38   ` Ville Syrjälä
2018-04-05 18:12   ` [Intel-gfx] " Dhinakaran Pandiyan
2018-04-05 18:12     ` Dhinakaran Pandiyan

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=20180405163853.GK5453@intel.com \
    --to=ville.syrjala@linux.intel.com \
    --cc=airlied@linux.ie \
    --cc=dhinakaran.pandiyan@intel.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=jani.nikula@linux.intel.com \
    --cc=joonas.lahtinen@linux.intel.com \
    --cc=labbott@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lyude@redhat.com \
    --cc=rodrigo.vivi@intel.com \
    --cc=stable@vger.kernel.org \
    /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.