All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jani Nikula <jani.nikula@linux.intel.com>
To: "José Roberto de Souza" <jose.souza@intel.com>,
	intel-gfx@lists.freedesktop.org
Cc: s.zharkoff@gmail.com
Subject: Re: [Intel-gfx] [PATCH v2] drm/i915/display: Force the state compute phase once to enable PSR
Date: Wed, 18 Dec 2019 13:27:47 +0200	[thread overview]
Message-ID: <871rt1zxe4.fsf@intel.com> (raw)
In-Reply-To: <20191217135646.89481-1-jose.souza@intel.com>

On Tue, 17 Dec 2019, José Roberto de Souza <jose.souza@intel.com> wrote:
> Recent improvements in the state tracking in i915 caused PSR to not be
> enabled when reusing firmware/BIOS modeset, this is due to all initial
> commits returning ealier in intel_atomic_check() as needs_modeset()
> is always false.
>
> To fix that here forcing the state compute phase in CRTC that is
> driving the eDP that supports PSR once. Enable or disable PSR do not
> require a fullmodeset, so user will still experience glitch free boot
> process plus the power savings that PSR brings.
>
> It was tried to set mode_changed in intel_initial_commit() but at
> this point the connectors are not registered causing a crash when
> computing encoder state.
>
> v2:
> - removed function return
> - change arguments to match intel_hdcp_atomic_check
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=112253
> Reported-by: <s.zharkoff@gmail.com>
> Cc: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
> Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_atomic.c |  2 ++
>  drivers/gpu/drm/i915/display/intel_psr.c    | 24 +++++++++++++++++++++
>  drivers/gpu/drm/i915/display/intel_psr.h    |  6 ++++++
>  drivers/gpu/drm/i915/i915_drv.h             |  1 +
>  4 files changed, 33 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_atomic.c b/drivers/gpu/drm/i915/display/intel_atomic.c
> index fd0026fc3618..59be1d0c4f36 100644
> --- a/drivers/gpu/drm/i915/display/intel_atomic.c
> +++ b/drivers/gpu/drm/i915/display/intel_atomic.c
> @@ -37,6 +37,7 @@
>  #include "intel_atomic.h"
>  #include "intel_display_types.h"
>  #include "intel_hdcp.h"
> +#include "intel_psr.h"
>  #include "intel_sprite.h"
>  
>  /**
> @@ -129,6 +130,7 @@ int intel_digital_connector_atomic_check(struct drm_connector *conn,
>  	struct drm_crtc_state *crtc_state;
>  
>  	intel_hdcp_atomic_check(conn, old_state, new_state);
> +	intel_psr_atomic_check(conn, old_state, new_state);
>  
>  	if (!new_state->crtc)
>  		return 0;
> diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
> index 16e9ff47d519..e3fd5f1e2d21 100644
> --- a/drivers/gpu/drm/i915/display/intel_psr.c
> +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> @@ -1523,3 +1523,27 @@ bool intel_psr_enabled(struct intel_dp *intel_dp)
>  
>  	return ret;
>  }
> +
> +void intel_psr_atomic_check(struct drm_connector *connector,
> +			    struct drm_connector_state *old_state,
> +			    struct drm_connector_state *new_state)
> +{
> +	struct drm_i915_private *dev_priv = to_i915(connector->dev);
> +	struct intel_connector *intel_connector;
> +	struct intel_digital_port *dig_port;
> +	struct drm_crtc_state *crtc_state;
> +
> +	if (!CAN_PSR(dev_priv) || !new_state->crtc ||
> +	    dev_priv->psr.initially_probed)
> +		return;
> +
> +	intel_connector = to_intel_connector(connector);
> +	dig_port = enc_to_dig_port(&intel_connector->encoder->base);
> +	if (dev_priv->psr.dp != &dig_port->dp)
> +		return;
> +
> +	crtc_state = drm_atomic_get_new_crtc_state(new_state->state,
> +						   new_state->crtc);
> +	crtc_state->mode_changed = true;
> +	dev_priv->psr.initially_probed = true;
> +}
> diff --git a/drivers/gpu/drm/i915/display/intel_psr.h b/drivers/gpu/drm/i915/display/intel_psr.h
> index 46e4de8b8cd5..6348df32baed 100644
> --- a/drivers/gpu/drm/i915/display/intel_psr.h
> +++ b/drivers/gpu/drm/i915/display/intel_psr.h
> @@ -6,6 +6,9 @@
>  #ifndef __INTEL_PSR_H__
>  #define __INTEL_PSR_H__
>  
> +#include <drm/drm_atomic.h>
> +#include <drm/drm_connector.h>
> +

Please use forward declarations instead of #includes when that's enough.

BR,
Jani.

>  #include "intel_frontbuffer.h"
>  
>  struct drm_i915_private;
> @@ -35,5 +38,8 @@ void intel_psr_short_pulse(struct intel_dp *intel_dp);
>  int intel_psr_wait_for_idle(const struct intel_crtc_state *new_crtc_state,
>  			    u32 *out_value);
>  bool intel_psr_enabled(struct intel_dp *intel_dp);
> +void intel_psr_atomic_check(struct drm_connector *connector,
> +			    struct drm_connector_state *old_state,
> +			    struct drm_connector_state *new_state);
>  
>  #endif /* __INTEL_PSR_H__ */
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 0781b6326b8c..873eec1e37e9 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -505,6 +505,7 @@ struct i915_psr {
>  	bool dc3co_enabled;
>  	u32 dc3co_exit_delay;
>  	struct delayed_work idle_work;
> +	bool initially_probed;
>  };
>  
>  #define QUIRK_LVDS_SSC_DISABLE (1<<1)

-- 
Jani Nikula, Intel Open Source Graphics Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

      parent reply	other threads:[~2019-12-18 11:27 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-17 13:56 [Intel-gfx] [PATCH v2] drm/i915/display: Force the state compute phase once to enable PSR José Roberto de Souza
2019-12-17 18:35 ` [Intel-gfx] ✓ Fi.CI.BAT: success for drm/i915/display: Force the state compute phase once to enable PSR (rev3) Patchwork
2019-12-18  5:56 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
2019-12-18 11:27 ` Jani Nikula [this message]

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=871rt1zxe4.fsf@intel.com \
    --to=jani.nikula@linux.intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=jose.souza@intel.com \
    --cc=s.zharkoff@gmail.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.