diff mbox

[1/9] drm/i915/psr: Do not activate PSR on frontbuffer flush from fbdev.

Message ID 20180127024923.3093-1-dhinakaran.pandiyan@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Dhinakaran Pandiyan Jan. 27, 2018, 2:49 a.m. UTC
There is no corresponding invalidate call before the buffer is written
to, this results in screen freezing sometime after switching to console
mode with PSR enabled. Invalidating the front buffer in the fbdev call
backs won't work either as some of them are called in atomic contexts and
{drrs, fbc, psr}_invalidate all sleep. So don't activate PSR for now.

Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
---
 drivers/gpu/drm/i915/intel_psr.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

Rodrigo Vivi Feb. 1, 2018, 6:56 a.m. UTC | #1
On Sat, Jan 27, 2018 at 02:49:15AM +0000, Dhinakaran Pandiyan wrote:
> There is no corresponding invalidate call before the buffer is written
> to, this results in screen freezing sometime after switching to console
> mode with PSR enabled. Invalidating the front buffer in the fbdev call
> backs won't work either as some of them are called in atomic contexts and
> {drrs, fbc, psr}_invalidate all sleep. So don't activate PSR for now.
> 
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_psr.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
> index e9feffdea899..c12af1118647 100644
> --- a/drivers/gpu/drm/i915/intel_psr.c
> +++ b/drivers/gpu/drm/i915/intel_psr.c
> @@ -881,6 +881,9 @@ void intel_psr_flush(struct drm_i915_private *dev_priv,
>  	if (!CAN_PSR(dev_priv))
>  		return;
>  
> +	if (origin == ORIGIN_DIRTYFB)
> +		return;
> +

I'd like Paulo to take a look here.

What I'm confused now is who (what fbt bit) is actually blocking PSR to work
on fbdev.

And what would be the risks of other corner cases or the risk of this
not getting psr re-enabled until next reboot...

>  	mutex_lock(&dev_priv->psr.lock);
>  	if (!dev_priv->psr.enabled) {
>  		mutex_unlock(&dev_priv->psr.lock);
> -- 
> 2.14.1
>
Dhinakaran Pandiyan Feb. 7, 2018, 2:27 a.m. UTC | #2
On Wed, 2018-01-31 at 22:56 -0800, Rodrigo Vivi wrote:
> On Sat, Jan 27, 2018 at 02:49:15AM +0000, Dhinakaran Pandiyan wrote:

> > There is no corresponding invalidate call before the buffer is written

> > to, this results in screen freezing sometime after switching to console

> > mode with PSR enabled. Invalidating the front buffer in the fbdev call

> > backs won't work either as some of them are called in atomic contexts and

> > {drrs, fbc, psr}_invalidate all sleep. So don't activate PSR for now.

> > 

> > Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>

> > Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>

> > ---

> >  drivers/gpu/drm/i915/intel_psr.c | 3 +++

> >  1 file changed, 3 insertions(+)

> > 

> > diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c

> > index e9feffdea899..c12af1118647 100644

> > --- a/drivers/gpu/drm/i915/intel_psr.c

> > +++ b/drivers/gpu/drm/i915/intel_psr.c

> > @@ -881,6 +881,9 @@ void intel_psr_flush(struct drm_i915_private *dev_priv,

> >  	if (!CAN_PSR(dev_priv))

> >  		return;

> >  

> > +	if (origin == ORIGIN_DIRTYFB)

> > +		return;

> > +

> 

> I'd like Paulo to take a look here.

> 

> What I'm confused now is who (what fbt bit) is actually blocking PSR to work

> on fbdev.


intel_psr_flush()->intel_psr_exit() does get called as expected, so it's
not the frontbuffer bit that is preventing PSR from exiting. I don't
fully understand why exactly intel_psr_flush() is insufficient (without
psr_invalidate()).

One thing that might be of interest is the gem object has write domain
as zero. I am wondering if we are missing some initialization. But, that
does not explain why the screen freezes only with PSR

> 

> And what would be the risks of other corner cases or the risk of this

> not getting psr re-enabled until next reboot...

> 



> >  	mutex_lock(&dev_priv->psr.lock);

> >  	if (!dev_priv->psr.enabled) {

> >  		mutex_unlock(&dev_priv->psr.lock);

> > -- 

> > 2.14.1

> > 

> _______________________________________________

> Intel-gfx mailing list

> Intel-gfx@lists.freedesktop.org

> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
index e9feffdea899..c12af1118647 100644
--- a/drivers/gpu/drm/i915/intel_psr.c
+++ b/drivers/gpu/drm/i915/intel_psr.c
@@ -881,6 +881,9 @@  void intel_psr_flush(struct drm_i915_private *dev_priv,
 	if (!CAN_PSR(dev_priv))
 		return;
 
+	if (origin == ORIGIN_DIRTYFB)
+		return;
+
 	mutex_lock(&dev_priv->psr.lock);
 	if (!dev_priv->psr.enabled) {
 		mutex_unlock(&dev_priv->psr.lock);