public inbox for intel-gfx@lists.freedesktop.org
 help / color / mirror / Atom feed
* [PATCH 00/12] PSR clean-up, new vfuncs and more use of HW tracking.
@ 2017-07-12 19:20 Rodrigo Vivi
  2017-07-12 19:20 ` [PATCH 01/12] drm/i915/psr: Remove vlv_is_active function Rodrigo Vivi
                   ` (15 more replies)
  0 siblings, 16 replies; 27+ messages in thread
From: Rodrigo Vivi @ 2017-07-12 19:20 UTC (permalink / raw)
  To: intel-gfx; +Cc: Rodrigo Vivi

Most of patches on this series is only a clean up with
no functional changes. The goal is to allow split VLV PSR
implementation better. In a way that would get more cleaner
when we use or not the hw tracking.

The ones with actual functional changes are:
0002-drm-i915-psr-Avoid-any-PSR-stuff-on-platforms-withou.patch
that protects PSR of running anything on the platforms without support.

and
0012-drm-i915-psr-Use-more-PSR-HW-tracking.patch
that allows us to use more HW tracking and consequently
a proper PSR2 with partial screen updates.

Rodrigo Vivi (12):
  drm/i915/psr: Remove vlv_is_active function.
  drm/i915/psr: Avoid any PSR stuff on platforms without support.
  drm/i915/psr: vfunc for disabling source.
  drm/i915/psr: hsw_psr_activate.
  drm/i915/psr: Add activate vfunc.
  drm/i915/psr: Unify VSC setup functions.
  drm/i915/psr: Re-create a hsw_psr_enable_source.
  drm/i915/psr: Re-org Activate after enable
  drm/i915/psr: Add setup VSC vfunc.
  drm/i915/psr: Add enable_sink vfunc.
  drm/i915/psr: Add enable_source vfunc.
  drm/i915/psr: Use more PSR HW tracking.

 drivers/gpu/drm/i915/i915_drv.h          |   7 +
 drivers/gpu/drm/i915/intel_drv.h         |   3 +-
 drivers/gpu/drm/i915/intel_frontbuffer.c |   2 +-
 drivers/gpu/drm/i915/intel_psr.c         | 267 ++++++++++++++++---------------
 4 files changed, 150 insertions(+), 129 deletions(-)

-- 
2.13.2

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 27+ messages in thread

* [PATCH 01/12] drm/i915/psr: Remove vlv_is_active function.
  2017-07-12 19:20 [PATCH 00/12] PSR clean-up, new vfuncs and more use of HW tracking Rodrigo Vivi
@ 2017-07-12 19:20 ` Rodrigo Vivi
  2017-07-12 19:56   ` Chris Wilson
  2017-07-12 19:20 ` [PATCH 02/12] drm/i915/psr: Avoid any PSR stuff on platforms without support Rodrigo Vivi
                   ` (14 subsequent siblings)
  15 siblings, 1 reply; 27+ messages in thread
From: Rodrigo Vivi @ 2017-07-12 19:20 UTC (permalink / raw)
  To: intel-gfx; +Cc: Dhinakaran Pandiyan, Rodrigo Vivi

Let's start the clean-up and re-org of VLV PSR functions by
removing an useless one.

Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Cc: Jim Bride <jim.bride@linux.intel.com>
Cc: Vathsala NAgaraju <vathsala.nagaraju@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
 drivers/gpu/drm/i915/intel_psr.c | 16 ++++------------
 1 file changed, 4 insertions(+), 12 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
index 559f1ab42bfc..1af4438a6095 100644
--- a/drivers/gpu/drm/i915/intel_psr.c
+++ b/drivers/gpu/drm/i915/intel_psr.c
@@ -61,17 +61,6 @@ static bool is_edp_psr(struct intel_dp *intel_dp)
 	return intel_dp->psr_dpcd[0] & DP_PSR_IS_SUPPORTED;
 }
 
-static bool vlv_is_psr_active_on_pipe(struct drm_device *dev, int pipe)
-{
-	struct drm_i915_private *dev_priv = to_i915(dev);
-	uint32_t val;
-
-	val = I915_READ(VLV_PSRSTAT(pipe)) &
-	      VLV_EDP_PSR_CURR_STATE_MASK;
-	return (val == VLV_EDP_PSR_ACTIVE_NORFB_UP) ||
-	       (val == VLV_EDP_PSR_ACTIVE_SF_UPDATE);
-}
-
 static void intel_psr_write_vsc(struct intel_dp *intel_dp,
 				const struct edp_vsc_psr *vsc_psr)
 {
@@ -610,7 +599,10 @@ static void vlv_psr_disable(struct intel_dp *intel_dp)
 
 		dev_priv->psr.active = false;
 	} else {
-		WARN_ON(vlv_is_psr_active_on_pipe(dev, intel_crtc->pipe));
+		val = I915_READ(VLV_PSRSTAT(intel_crtc->pipe)) &
+			VLV_EDP_PSR_CURR_STATE_MASK;
+		WARN_ON(val == VLV_EDP_PSR_ACTIVE_NORFB_UP ||
+			val == VLV_EDP_PSR_ACTIVE_SF_UPDATE);
 	}
 }
 
-- 
2.13.2

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH 02/12] drm/i915/psr: Avoid any PSR stuff on platforms without support.
  2017-07-12 19:20 [PATCH 00/12] PSR clean-up, new vfuncs and more use of HW tracking Rodrigo Vivi
  2017-07-12 19:20 ` [PATCH 01/12] drm/i915/psr: Remove vlv_is_active function Rodrigo Vivi
@ 2017-07-12 19:20 ` Rodrigo Vivi
  2017-07-12 19:20 ` [PATCH 03/12] drm/i915/psr: vfunc for disabling source Rodrigo Vivi
                   ` (13 subsequent siblings)
  15 siblings, 0 replies; 27+ messages in thread
From: Rodrigo Vivi @ 2017-07-12 19:20 UTC (permalink / raw)
  To: intel-gfx; +Cc: Daniel Vetter, Dhinakaran Pandiyan, Rodrigo Vivi

We really don't want to setup vfuncs and lock mutexes on
platforms that has no support to PSR.

Also we know what platforms they are so let's do it quietly.

Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Cc: Jim Bride <jim.bride@linux.intel.com>
Cc: Vathsala NAgaraju <vathsala.nagaraju@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
 drivers/gpu/drm/i915/intel_psr.c | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
index 1af4438a6095..71d65e166277 100644
--- a/drivers/gpu/drm/i915/intel_psr.c
+++ b/drivers/gpu/drm/i915/intel_psr.c
@@ -485,10 +485,8 @@ void intel_psr_enable(struct intel_dp *intel_dp)
 	enum transcoder cpu_transcoder = crtc->config->cpu_transcoder;
 	u32 chicken;
 
-	if (!HAS_PSR(dev_priv)) {
-		DRM_DEBUG_KMS("PSR not supported on this platform\n");
+	if (!HAS_PSR(dev_priv))
 		return;
-	}
 
 	if (!is_edp_psr(intel_dp)) {
 		DRM_DEBUG_KMS("PSR not supported by this panel\n");
@@ -664,6 +662,9 @@ void intel_psr_disable(struct intel_dp *intel_dp)
 	struct drm_device *dev = intel_dig_port->base.base.dev;
 	struct drm_i915_private *dev_priv = to_i915(dev);
 
+	if (!HAS_PSR(dev_priv))
+		return;
+
 	mutex_lock(&dev_priv->psr.lock);
 	if (!dev_priv->psr.enabled) {
 		mutex_unlock(&dev_priv->psr.lock);
@@ -815,6 +816,9 @@ void intel_psr_single_frame_update(struct drm_i915_private *dev_priv,
 	enum pipe pipe;
 	u32 val;
 
+	if (!HAS_PSR(dev_priv))
+		return;
+
 	/*
 	 * Single frame update is already supported on BDW+ but it requires
 	 * many W/A and it isn't really needed.
@@ -861,6 +865,9 @@ void intel_psr_invalidate(struct drm_i915_private *dev_priv,
 	struct drm_crtc *crtc;
 	enum pipe pipe;
 
+	if (!HAS_PSR(dev_priv))
+		return;
+
 	mutex_lock(&dev_priv->psr.lock);
 	if (!dev_priv->psr.enabled) {
 		mutex_unlock(&dev_priv->psr.lock);
@@ -898,6 +905,9 @@ void intel_psr_flush(struct drm_i915_private *dev_priv,
 	struct drm_crtc *crtc;
 	enum pipe pipe;
 
+	if (!HAS_PSR(dev_priv))
+		return;
+
 	mutex_lock(&dev_priv->psr.lock);
 	if (!dev_priv->psr.enabled) {
 		mutex_unlock(&dev_priv->psr.lock);
@@ -930,6 +940,9 @@ void intel_psr_flush(struct drm_i915_private *dev_priv,
  */
 void intel_psr_init(struct drm_i915_private *dev_priv)
 {
+	if (!HAS_PSR(dev_priv))
+		return;
+
 	dev_priv->psr_mmio_base = IS_HASWELL(dev_priv) ?
 		HSW_EDP_PSR_BASE : BDW_EDP_PSR_BASE;
 
-- 
2.13.2

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH 03/12] drm/i915/psr: vfunc for disabling source.
  2017-07-12 19:20 [PATCH 00/12] PSR clean-up, new vfuncs and more use of HW tracking Rodrigo Vivi
  2017-07-12 19:20 ` [PATCH 01/12] drm/i915/psr: Remove vlv_is_active function Rodrigo Vivi
  2017-07-12 19:20 ` [PATCH 02/12] drm/i915/psr: Avoid any PSR stuff on platforms without support Rodrigo Vivi
@ 2017-07-12 19:20 ` Rodrigo Vivi
  2017-07-12 19:20 ` [PATCH 04/12] drm/i915/psr: hsw_psr_activate Rodrigo Vivi
                   ` (12 subsequent siblings)
  15 siblings, 0 replies; 27+ messages in thread
From: Rodrigo Vivi @ 2017-07-12 19:20 UTC (permalink / raw)
  To: intel-gfx; +Cc: Daniel Vetter, Dhinakaran Pandiyan, Rodrigo Vivi

VLV/CHV has a total different PSR implementation than the
other platforms, so let's start moving that to vfuncs.
Let's start with disable_src one.

Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Cc: Jim Bride <jim.bride@linux.intel.com>
Cc: Vathsala NAgaraju <vathsala.nagaraju@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
 drivers/gpu/drm/i915/i915_drv.h  |  2 ++
 drivers/gpu/drm/i915/intel_psr.c | 12 +++++++-----
 2 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 81cd21ecfa7d..b8f14fc41dd4 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1145,6 +1145,8 @@ struct i915_psr {
 	bool y_cord_support;
 	bool colorimetry_support;
 	bool alpm;
+
+	void (*disable_source)(struct intel_dp *);
 };
 
 enum intel_pch {
diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
index 71d65e166277..535ea0b7ec20 100644
--- a/drivers/gpu/drm/i915/intel_psr.c
+++ b/drivers/gpu/drm/i915/intel_psr.c
@@ -671,11 +671,7 @@ void intel_psr_disable(struct intel_dp *intel_dp)
 		return;
 	}
 
-	/* Disable PSR on Source */
-	if (HAS_DDI(dev_priv))
-		hsw_psr_disable(intel_dp);
-	else
-		vlv_psr_disable(intel_dp);
+	dev_priv->psr.disable_source(intel_dp);
 
 	/* Disable PSR on Sink */
 	drm_dp_dpcd_writeb(&intel_dp->aux, DP_PSR_EN_CFG, 0);
@@ -973,4 +969,10 @@ void intel_psr_init(struct drm_i915_private *dev_priv)
 
 	INIT_DELAYED_WORK(&dev_priv->psr.work, intel_psr_work);
 	mutex_init(&dev_priv->psr.lock);
+
+	if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
+		dev_priv->psr.disable_source = vlv_psr_disable;
+	} else {
+		dev_priv->psr.disable_source = hsw_psr_disable;
+	}
 }
-- 
2.13.2

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH 04/12] drm/i915/psr: hsw_psr_activate.
  2017-07-12 19:20 [PATCH 00/12] PSR clean-up, new vfuncs and more use of HW tracking Rodrigo Vivi
                   ` (2 preceding siblings ...)
  2017-07-12 19:20 ` [PATCH 03/12] drm/i915/psr: vfunc for disabling source Rodrigo Vivi
@ 2017-07-12 19:20 ` Rodrigo Vivi
  2017-09-07 20:07   ` Pandiyan, Dhinakaran
  2017-07-12 19:20 ` [PATCH 05/12] drm/i915/psr: Add activate vfunc Rodrigo Vivi
                   ` (11 subsequent siblings)
  15 siblings, 1 reply; 27+ messages in thread
From: Rodrigo Vivi @ 2017-07-12 19:20 UTC (permalink / raw)
  To: intel-gfx; +Cc: Dhinakaran Pandiyan, Rodrigo Vivi

Oh HSW the real activate of PSR is decided by the source
after certain amount of configured idle frames.

However for the driver perspective where we track psr.active
variable this function here is the actual activate one. So
let's rename it before moving to vfunc with that.

Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Cc: Jim Bride <jim.bride@linux.intel.com>
Cc: Vathsala NAgaraju <vathsala.nagaraju@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
 drivers/gpu/drm/i915/intel_psr.c | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
index 535ea0b7ec20..45c640989a46 100644
--- a/drivers/gpu/drm/i915/intel_psr.c
+++ b/drivers/gpu/drm/i915/intel_psr.c
@@ -254,7 +254,7 @@ static void vlv_psr_activate(struct intel_dp *intel_dp)
 		   VLV_EDP_PSR_ACTIVE_ENTRY);
 }
 
-static void intel_enable_source_psr1(struct intel_dp *intel_dp)
+static void hsw_activate_psr1(struct intel_dp *intel_dp)
 {
 	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
 	struct drm_device *dev = dig_port->base.base.dev;
@@ -307,7 +307,7 @@ static void intel_enable_source_psr1(struct intel_dp *intel_dp)
 	I915_WRITE(EDP_PSR_CTL, val);
 }
 
-static void intel_enable_source_psr2(struct intel_dp *intel_dp)
+static void hsw_activate_psr2(struct intel_dp *intel_dp)
 {
 	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
 	struct drm_device *dev = dig_port->base.base.dev;
@@ -343,17 +343,22 @@ static void intel_enable_source_psr2(struct intel_dp *intel_dp)
 	I915_WRITE(EDP_PSR2_CTL, val);
 }
 
-static void hsw_psr_enable_source(struct intel_dp *intel_dp)
+static void hsw_psr_activate(struct intel_dp *intel_dp)
 {
 	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
 	struct drm_device *dev = dig_port->base.base.dev;
 	struct drm_i915_private *dev_priv = to_i915(dev);
 
+	/* On HSW+ after we enable PSR on source it will activate it
+	 * as soon as it match configure idle_frame count. So
+	 * we just actually enable it here on activation time.
+	 */
+
 	/* psr1 and psr2 are mutually exclusive.*/
 	if (dev_priv->psr.psr2_support)
-		intel_enable_source_psr2(intel_dp);
+		hsw_activate_psr2(intel_dp);
 	else
-		intel_enable_source_psr1(intel_dp);
+		hsw_activate_psr1(intel_dp);
 }
 
 static bool intel_psr_match_conditions(struct intel_dp *intel_dp)
@@ -459,11 +464,7 @@ static void intel_psr_activate(struct intel_dp *intel_dp)
 
 	/* Enable/Re-enable PSR on the host */
 	if (HAS_DDI(dev_priv))
-		/* On HSW+ after we enable PSR on source it will activate it
-		 * as soon as it match configure idle_frame count. So
-		 * we just actually enable it here on activation time.
-		 */
-		hsw_psr_enable_source(intel_dp);
+		hsw_psr_activate(intel_dp);
 	else
 		vlv_psr_activate(intel_dp);
 
-- 
2.13.2

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH 05/12] drm/i915/psr: Add activate vfunc.
  2017-07-12 19:20 [PATCH 00/12] PSR clean-up, new vfuncs and more use of HW tracking Rodrigo Vivi
                   ` (3 preceding siblings ...)
  2017-07-12 19:20 ` [PATCH 04/12] drm/i915/psr: hsw_psr_activate Rodrigo Vivi
@ 2017-07-12 19:20 ` Rodrigo Vivi
  2017-07-12 19:20 ` [PATCH 06/12] drm/i915/psr: Unify VSC setup functions Rodrigo Vivi
                   ` (10 subsequent siblings)
  15 siblings, 0 replies; 27+ messages in thread
From: Rodrigo Vivi @ 2017-07-12 19:20 UTC (permalink / raw)
  To: intel-gfx; +Cc: Daniel Vetter, Dhinakaran Pandiyan, Rodrigo Vivi

Continue on VLV PSR split with vfunc, let's move activate
function there.

Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Cc: Jim Bride <jim.bride@linux.intel.com>
Cc: Vathsala NAgaraju <vathsala.nagaraju@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
 drivers/gpu/drm/i915/i915_drv.h  | 1 +
 drivers/gpu/drm/i915/intel_psr.c | 9 +++------
 2 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index b8f14fc41dd4..ac33f0c89ec5 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1147,6 +1147,7 @@ struct i915_psr {
 	bool alpm;
 
 	void (*disable_source)(struct intel_dp *);
+	void (*activate)(struct intel_dp *);
 };
 
 enum intel_pch {
diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
index 45c640989a46..8880d2cbe7fb 100644
--- a/drivers/gpu/drm/i915/intel_psr.c
+++ b/drivers/gpu/drm/i915/intel_psr.c
@@ -462,12 +462,7 @@ static void intel_psr_activate(struct intel_dp *intel_dp)
 	WARN_ON(dev_priv->psr.active);
 	lockdep_assert_held(&dev_priv->psr.lock);
 
-	/* Enable/Re-enable PSR on the host */
-	if (HAS_DDI(dev_priv))
-		hsw_psr_activate(intel_dp);
-	else
-		vlv_psr_activate(intel_dp);
-
+	dev_priv->psr.activate(intel_dp);
 	dev_priv->psr.active = true;
 }
 
@@ -973,7 +968,9 @@ void intel_psr_init(struct drm_i915_private *dev_priv)
 
 	if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
 		dev_priv->psr.disable_source = vlv_psr_disable;
+		dev_priv->psr.activate = vlv_psr_activate;
 	} else {
 		dev_priv->psr.disable_source = hsw_psr_disable;
+		dev_priv->psr.activate = hsw_psr_activate;
 	}
 }
-- 
2.13.2

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH 06/12] drm/i915/psr: Unify VSC setup functions.
  2017-07-12 19:20 [PATCH 00/12] PSR clean-up, new vfuncs and more use of HW tracking Rodrigo Vivi
                   ` (4 preceding siblings ...)
  2017-07-12 19:20 ` [PATCH 05/12] drm/i915/psr: Add activate vfunc Rodrigo Vivi
@ 2017-07-12 19:20 ` Rodrigo Vivi
  2017-07-12 19:20 ` [PATCH 07/12] drm/i915/psr: Re-create a hsw_psr_enable_source Rodrigo Vivi
                   ` (9 subsequent siblings)
  15 siblings, 0 replies; 27+ messages in thread
From: Rodrigo Vivi @ 2017-07-12 19:20 UTC (permalink / raw)
  To: intel-gfx; +Cc: Dhinakaran Pandiyan, Rodrigo Vivi

VSC package is decided per eDP spec for psr1 or psr2,
and not per platform, so let's unify it and kill "skl"
func.

Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Cc: Jim Bride <jim.bride@linux.intel.com>
Cc: Vathsala NAgaraju <vathsala.nagaraju@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
 drivers/gpu/drm/i915/intel_psr.c | 59 +++++++++++++++++++---------------------
 1 file changed, 28 insertions(+), 31 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
index 8880d2cbe7fb..2fbf803f0667 100644
--- a/drivers/gpu/drm/i915/intel_psr.c
+++ b/drivers/gpu/drm/i915/intel_psr.c
@@ -108,45 +108,42 @@ static void vlv_psr_setup_vsc(struct intel_dp *intel_dp)
 	I915_WRITE(VLV_VSCSDP(pipe), val);
 }
 
-static void skl_psr_setup_su_vsc(struct intel_dp *intel_dp)
+static void hsw_psr_setup_vsc(struct intel_dp *intel_dp)
 {
-	struct edp_vsc_psr psr_vsc;
 	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
 	struct drm_device *dev = intel_dig_port->base.base.dev;
 	struct drm_i915_private *dev_priv = to_i915(dev);
 
-	/* Prepare VSC Header for SU as per EDP 1.4 spec, Table 6.11 */
-	memset(&psr_vsc, 0, sizeof(psr_vsc));
-	psr_vsc.sdp_header.HB0 = 0;
-	psr_vsc.sdp_header.HB1 = 0x7;
-	if (dev_priv->psr.colorimetry_support &&
-		dev_priv->psr.y_cord_support) {
-		psr_vsc.sdp_header.HB2 = 0x5;
-		psr_vsc.sdp_header.HB3 = 0x13;
-	} else if (dev_priv->psr.y_cord_support) {
-		psr_vsc.sdp_header.HB2 = 0x4;
-		psr_vsc.sdp_header.HB3 = 0xe;
+	struct edp_vsc_psr psr_vsc;
+
+	if (dev_priv->psr.psr2_support) {
+		/* Prepare VSC Header for SU as per EDP 1.4 spec, Table 6.11 */
+		memset(&psr_vsc, 0, sizeof(psr_vsc));
+		psr_vsc.sdp_header.HB0 = 0;
+		psr_vsc.sdp_header.HB1 = 0x7;
+		if (dev_priv->psr.colorimetry_support &&
+		    dev_priv->psr.y_cord_support) {
+			psr_vsc.sdp_header.HB2 = 0x5;
+			psr_vsc.sdp_header.HB3 = 0x13;
+		} else if (dev_priv->psr.y_cord_support) {
+			psr_vsc.sdp_header.HB2 = 0x4;
+			psr_vsc.sdp_header.HB3 = 0xe;
+		} else {
+			psr_vsc.sdp_header.HB2 = 0x3;
+			psr_vsc.sdp_header.HB3 = 0xc;
+		}
 	} else {
-		psr_vsc.sdp_header.HB2 = 0x3;
-		psr_vsc.sdp_header.HB3 = 0xc;
+		/* Prepare VSC packet as per EDP 1.3 spec, Table 3.10 */
+		memset(&psr_vsc, 0, sizeof(psr_vsc));
+		psr_vsc.sdp_header.HB0 = 0;
+		psr_vsc.sdp_header.HB1 = 0x7;
+		psr_vsc.sdp_header.HB2 = 0x2;
+		psr_vsc.sdp_header.HB3 = 0x8;
 	}
 
 	intel_psr_write_vsc(intel_dp, &psr_vsc);
 }
 
-static void hsw_psr_setup_vsc(struct intel_dp *intel_dp)
-{
-	struct edp_vsc_psr psr_vsc;
-
-	/* Prepare VSC packet as per EDP 1.3 spec, Table 3.10 */
-	memset(&psr_vsc, 0, sizeof(psr_vsc));
-	psr_vsc.sdp_header.HB0 = 0;
-	psr_vsc.sdp_header.HB1 = 0x7;
-	psr_vsc.sdp_header.HB2 = 0x2;
-	psr_vsc.sdp_header.HB3 = 0x8;
-	intel_psr_write_vsc(intel_dp, &psr_vsc);
-}
-
 static void vlv_psr_enable_sink(struct intel_dp *intel_dp)
 {
 	drm_dp_dpcd_writeb(&intel_dp->aux, DP_PSR_EN_CFG,
@@ -501,8 +498,10 @@ void intel_psr_enable(struct intel_dp *intel_dp)
 	dev_priv->psr.busy_frontbuffer_bits = 0;
 
 	if (HAS_DDI(dev_priv)) {
+
+		hsw_psr_setup_vsc(intel_dp);
+
 		if (dev_priv->psr.psr2_support) {
-			skl_psr_setup_su_vsc(intel_dp);
 			chicken = PSR2_VSC_ENABLE_PROG_HEADER;
 			if (dev_priv->psr.y_cord_support)
 				chicken |= PSR2_ADD_VERTICAL_LINE_COUNT;
@@ -514,8 +513,6 @@ void intel_psr_enable(struct intel_dp *intel_dp)
 				   EDP_PSR_DEBUG_MASK_MAX_SLEEP |
 				   EDP_PSR_DEBUG_MASK_DISP_REG_WRITE);
 		} else {
-			/* set up vsc header for psr1 */
-			hsw_psr_setup_vsc(intel_dp);
 			/*
 			 * Per Spec: Avoid continuous PSR exit by masking MEMUP
 			 * and HPD. also mask LPSP to avoid dependency on other
-- 
2.13.2

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH 07/12] drm/i915/psr: Re-create a hsw_psr_enable_source.
  2017-07-12 19:20 [PATCH 00/12] PSR clean-up, new vfuncs and more use of HW tracking Rodrigo Vivi
                   ` (5 preceding siblings ...)
  2017-07-12 19:20 ` [PATCH 06/12] drm/i915/psr: Unify VSC setup functions Rodrigo Vivi
@ 2017-07-12 19:20 ` Rodrigo Vivi
  2017-07-14 10:06   ` Jani Nikula
  2017-07-12 19:20 ` [PATCH 08/12] drm/i915/psr: Re-org Activate after enable Rodrigo Vivi
                   ` (8 subsequent siblings)
  15 siblings, 1 reply; 27+ messages in thread
From: Rodrigo Vivi @ 2017-07-12 19:20 UTC (permalink / raw)
  To: intel-gfx; +Cc: Daniel Vetter, Dhinakaran Pandiyan, Rodrigo Vivi

This sequence is part of enable source anyways, but they
only need to be executed once and not on every activation,
So let's re-create hsw_enable_source.

Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Cc: Jim Bride <jim.bride@linux.intel.com>
Cc: Vathsala NAgaraju <vathsala.nagaraju@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
 drivers/gpu/drm/i915/intel_psr.c | 77 ++++++++++++++++++++++------------------
 1 file changed, 43 insertions(+), 34 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
index 2fbf803f0667..422033a6f9f6 100644
--- a/drivers/gpu/drm/i915/intel_psr.c
+++ b/drivers/gpu/drm/i915/intel_psr.c
@@ -219,6 +219,47 @@ static void hsw_psr_enable_sink(struct intel_dp *intel_dp)
 	I915_WRITE(aux_ctl_reg, aux_ctl);
 }
 
+static void hsw_psr_enable_source(struct intel_dp *intel_dp)
+{
+	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
+	struct drm_device *dev = dig_port->base.base.dev;
+	struct drm_i915_private *dev_priv = to_i915(dev);
+	struct intel_crtc *crtc = to_intel_crtc(dig_port->base.base.crtc);
+	enum transcoder cpu_transcoder = crtc->config->cpu_transcoder;
+
+	u32 chicken;
+
+	if (dev_priv->psr.psr2_support) {
+		chicken = PSR2_VSC_ENABLE_PROG_HEADER;
+		if (dev_priv->psr.y_cord_support)
+			chicken |= PSR2_ADD_VERTICAL_LINE_COUNT;
+		I915_WRITE(CHICKEN_TRANS(cpu_transcoder), chicken);
+		I915_WRITE(EDP_PSR_DEBUG_CTL,
+			   EDP_PSR_DEBUG_MASK_MEMUP |
+			   EDP_PSR_DEBUG_MASK_HPD |
+			   EDP_PSR_DEBUG_MASK_LPSP |
+			   EDP_PSR_DEBUG_MASK_MAX_SLEEP |
+			   EDP_PSR_DEBUG_MASK_DISP_REG_WRITE);
+	} else {
+		/*
+		 * Per Spec: Avoid continuous PSR exit by masking MEMUP
+		 * and HPD. also mask LPSP to avoid dependency on other
+		 * drivers that might block runtime_pm besides
+		 * preventing  other hw tracking issues now we can rely
+		 * on frontbuffer tracking.
+		 */
+		I915_WRITE(EDP_PSR_DEBUG_CTL,
+			   EDP_PSR_DEBUG_MASK_MEMUP |
+			   EDP_PSR_DEBUG_MASK_HPD |
+			   EDP_PSR_DEBUG_MASK_LPSP);
+	}
+
+	/*
+	 * The rest of enable source sequence that should be here is actually
+	 * executed during activation time. So check hsw_psr_activate().
+	 */
+}
+
 static void vlv_psr_enable_source(struct intel_dp *intel_dp)
 {
 	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
@@ -474,9 +515,6 @@ void intel_psr_enable(struct intel_dp *intel_dp)
 	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
 	struct drm_device *dev = intel_dig_port->base.base.dev;
 	struct drm_i915_private *dev_priv = to_i915(dev);
-	struct intel_crtc *crtc = to_intel_crtc(intel_dig_port->base.base.crtc);
-	enum transcoder cpu_transcoder = crtc->config->cpu_transcoder;
-	u32 chicken;
 
 	if (!HAS_PSR(dev_priv))
 		return;
@@ -501,34 +539,11 @@ void intel_psr_enable(struct intel_dp *intel_dp)
 
 		hsw_psr_setup_vsc(intel_dp);
 
-		if (dev_priv->psr.psr2_support) {
-			chicken = PSR2_VSC_ENABLE_PROG_HEADER;
-			if (dev_priv->psr.y_cord_support)
-				chicken |= PSR2_ADD_VERTICAL_LINE_COUNT;
-			I915_WRITE(CHICKEN_TRANS(cpu_transcoder), chicken);
-			I915_WRITE(EDP_PSR_DEBUG_CTL,
-				   EDP_PSR_DEBUG_MASK_MEMUP |
-				   EDP_PSR_DEBUG_MASK_HPD |
-				   EDP_PSR_DEBUG_MASK_LPSP |
-				   EDP_PSR_DEBUG_MASK_MAX_SLEEP |
-				   EDP_PSR_DEBUG_MASK_DISP_REG_WRITE);
-		} else {
-			/*
-			 * Per Spec: Avoid continuous PSR exit by masking MEMUP
-			 * and HPD. also mask LPSP to avoid dependency on other
-			 * drivers that might block runtime_pm besides
-			 * preventing  other hw tracking issues now we can rely
-			 * on frontbuffer tracking.
-			 */
-			I915_WRITE(EDP_PSR_DEBUG_CTL,
-				   EDP_PSR_DEBUG_MASK_MEMUP |
-				   EDP_PSR_DEBUG_MASK_HPD |
-				   EDP_PSR_DEBUG_MASK_LPSP);
-		}
-
 		/* Enable PSR on the panel */
 		hsw_psr_enable_sink(intel_dp);
 
+		hsw_psr_enable_source(intel_dp);
+
 		if (INTEL_GEN(dev_priv) >= 9)
 			intel_psr_activate(intel_dp);
 	} else {
@@ -537,12 +552,6 @@ void intel_psr_enable(struct intel_dp *intel_dp)
 		/* Enable PSR on the panel */
 		vlv_psr_enable_sink(intel_dp);
 
-		/* On HSW+ enable_source also means go to PSR entry/active
-		 * state as soon as idle_frame achieved and here would be
-		 * to soon. However on VLV enable_source just enable PSR
-		 * but let it on inactive state. So we might do this prior
-		 * to active transition, i.e. here.
-		 */
 		vlv_psr_enable_source(intel_dp);
 	}
 
-- 
2.13.2

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH 08/12] drm/i915/psr: Re-org Activate after enable
  2017-07-12 19:20 [PATCH 00/12] PSR clean-up, new vfuncs and more use of HW tracking Rodrigo Vivi
                   ` (6 preceding siblings ...)
  2017-07-12 19:20 ` [PATCH 07/12] drm/i915/psr: Re-create a hsw_psr_enable_source Rodrigo Vivi
@ 2017-07-12 19:20 ` Rodrigo Vivi
  2017-07-14 10:07   ` Jani Nikula
  2017-07-12 19:20 ` [PATCH 09/12] drm/i915/psr: Add setup VSC vfunc Rodrigo Vivi
                   ` (7 subsequent siblings)
  15 siblings, 1 reply; 27+ messages in thread
From: Rodrigo Vivi @ 2017-07-12 19:20 UTC (permalink / raw)
  To: intel-gfx; +Cc: Daniel Vetter, Dhinakaran Pandiyan, Rodrigo Vivi

Let's move the activation calls together after enable is done.

No real functional change should be expected here. Just an attempt
to get it clear when we are really activating PSR after enabling it.

Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Cc: Jim Bride <jim.bride@linux.intel.com>
Cc: Vathsala NAgaraju <vathsala.nagaraju@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
 drivers/gpu/drm/i915/intel_psr.c | 29 +++++++++++++++--------------
 1 file changed, 15 insertions(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
index 422033a6f9f6..750df0172e8b 100644
--- a/drivers/gpu/drm/i915/intel_psr.c
+++ b/drivers/gpu/drm/i915/intel_psr.c
@@ -543,9 +543,6 @@ void intel_psr_enable(struct intel_dp *intel_dp)
 		hsw_psr_enable_sink(intel_dp);
 
 		hsw_psr_enable_source(intel_dp);
-
-		if (INTEL_GEN(dev_priv) >= 9)
-			intel_psr_activate(intel_dp);
 	} else {
 		vlv_psr_setup_vsc(intel_dp);
 
@@ -555,20 +552,24 @@ void intel_psr_enable(struct intel_dp *intel_dp)
 		vlv_psr_enable_source(intel_dp);
 	}
 
-	/*
-	 * FIXME: Activation should happen immediately since this function
-	 * is just called after pipe is fully trained and enabled.
-	 * However on every platform we face issues when first activation
-	 * follows a modeset so quickly.
-	 *     - On VLV/CHV we get bank screen on first activation
-	 *     - On HSW/BDW we get a recoverable frozen screen until next
-	 *       exit-activate sequence.
-	 */
-	if (INTEL_GEN(dev_priv) < 9)
+	dev_priv->psr.enabled = intel_dp;
+
+	if (INTEL_GEN(dev_priv) >= 9)
+		intel_psr_activate(intel_dp);
+	else
+		/*
+		 * FIXME: Activation should happen immediately since this
+		 * function is just called after pipe is fully trained and
+		 * enabled.
+		 * However on some platforms we face issues when first
+		 * activation follows a modeset so quickly.
+		 *     - On VLV/CHV we get bank screen on first activation
+		 *     - On HSW/BDW we get a recoverable frozen screen until
+		 *       next exit-activate sequence.
+		 */
 		schedule_delayed_work(&dev_priv->psr.work,
 				      msecs_to_jiffies(intel_dp->panel_power_cycle_delay * 5));
 
-	dev_priv->psr.enabled = intel_dp;
 unlock:
 	mutex_unlock(&dev_priv->psr.lock);
 }
-- 
2.13.2

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH 09/12] drm/i915/psr: Add setup VSC vfunc.
  2017-07-12 19:20 [PATCH 00/12] PSR clean-up, new vfuncs and more use of HW tracking Rodrigo Vivi
                   ` (7 preceding siblings ...)
  2017-07-12 19:20 ` [PATCH 08/12] drm/i915/psr: Re-org Activate after enable Rodrigo Vivi
@ 2017-07-12 19:20 ` Rodrigo Vivi
  2017-07-12 19:20 ` [PATCH 10/12] drm/i915/psr: Add enable_sink vfunc Rodrigo Vivi
                   ` (6 subsequent siblings)
  15 siblings, 0 replies; 27+ messages in thread
From: Rodrigo Vivi @ 2017-07-12 19:20 UTC (permalink / raw)
  To: intel-gfx; +Cc: Daniel Vetter, Dhinakaran Pandiyan, Rodrigo Vivi

Continue on VLV PSR split with vfunc, let's also create
one for setting up VSC.

Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Cc: Jim Bride <jim.bride@linux.intel.com>
Cc: Vathsala NAgaraju <vathsala.nagaraju@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
 drivers/gpu/drm/i915/i915_drv.h  | 1 +
 drivers/gpu/drm/i915/intel_psr.c | 9 ++++-----
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index ac33f0c89ec5..326a0ef645c2 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1148,6 +1148,7 @@ struct i915_psr {
 
 	void (*disable_source)(struct intel_dp *);
 	void (*activate)(struct intel_dp *);
+	void (*setup_vsc)(struct intel_dp *);
 };
 
 enum intel_pch {
diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
index 750df0172e8b..b52e4da8a151 100644
--- a/drivers/gpu/drm/i915/intel_psr.c
+++ b/drivers/gpu/drm/i915/intel_psr.c
@@ -535,17 +535,14 @@ void intel_psr_enable(struct intel_dp *intel_dp)
 
 	dev_priv->psr.busy_frontbuffer_bits = 0;
 
-	if (HAS_DDI(dev_priv)) {
-
-		hsw_psr_setup_vsc(intel_dp);
+	dev_priv->psr.setup_vsc(intel_dp);
 
+	if (HAS_DDI(dev_priv)) {
 		/* Enable PSR on the panel */
 		hsw_psr_enable_sink(intel_dp);
 
 		hsw_psr_enable_source(intel_dp);
 	} else {
-		vlv_psr_setup_vsc(intel_dp);
-
 		/* Enable PSR on the panel */
 		vlv_psr_enable_sink(intel_dp);
 
@@ -976,8 +973,10 @@ void intel_psr_init(struct drm_i915_private *dev_priv)
 	if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
 		dev_priv->psr.disable_source = vlv_psr_disable;
 		dev_priv->psr.activate = vlv_psr_activate;
+		dev_priv->psr.setup_vsc = vlv_psr_setup_vsc;
 	} else {
 		dev_priv->psr.disable_source = hsw_psr_disable;
 		dev_priv->psr.activate = hsw_psr_activate;
+		dev_priv->psr.setup_vsc = hsw_psr_setup_vsc;
 	}
 }
-- 
2.13.2

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH 10/12] drm/i915/psr: Add enable_sink vfunc.
  2017-07-12 19:20 [PATCH 00/12] PSR clean-up, new vfuncs and more use of HW tracking Rodrigo Vivi
                   ` (8 preceding siblings ...)
  2017-07-12 19:20 ` [PATCH 09/12] drm/i915/psr: Add setup VSC vfunc Rodrigo Vivi
@ 2017-07-12 19:20 ` Rodrigo Vivi
  2017-09-07 20:29   ` Pandiyan, Dhinakaran
  2017-07-12 19:20 ` [PATCH 11/12] drm/i915/psr: Add enable_source vfunc Rodrigo Vivi
                   ` (5 subsequent siblings)
  15 siblings, 1 reply; 27+ messages in thread
From: Rodrigo Vivi @ 2017-07-12 19:20 UTC (permalink / raw)
  To: intel-gfx; +Cc: Daniel Vetter, Dhinakaran Pandiyan, Rodrigo Vivi

Continue on VPV PSR split with vfunc, let's also create one
for enabling sink.

Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Cc: Jim Bride <jim.bride@linux.intel.com>
Cc: Vathsala NAgaraju <vathsala.nagaraju@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
 drivers/gpu/drm/i915/i915_drv.h  | 1 +
 drivers/gpu/drm/i915/intel_psr.c | 9 +++------
 2 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 326a0ef645c2..50b577b5e4d1 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1147,6 +1147,7 @@ struct i915_psr {
 	bool alpm;
 
 	void (*disable_source)(struct intel_dp *);
+	void (*enable_sink)(struct intel_dp *);
 	void (*activate)(struct intel_dp *);
 	void (*setup_vsc)(struct intel_dp *);
 };
diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
index b52e4da8a151..73f7ba78f4d2 100644
--- a/drivers/gpu/drm/i915/intel_psr.c
+++ b/drivers/gpu/drm/i915/intel_psr.c
@@ -536,16 +536,11 @@ void intel_psr_enable(struct intel_dp *intel_dp)
 	dev_priv->psr.busy_frontbuffer_bits = 0;
 
 	dev_priv->psr.setup_vsc(intel_dp);
+	dev_priv->psr.enable_sink(intel_dp);
 
 	if (HAS_DDI(dev_priv)) {
-		/* Enable PSR on the panel */
-		hsw_psr_enable_sink(intel_dp);
-
 		hsw_psr_enable_source(intel_dp);
 	} else {
-		/* Enable PSR on the panel */
-		vlv_psr_enable_sink(intel_dp);
-
 		vlv_psr_enable_source(intel_dp);
 	}
 
@@ -972,10 +967,12 @@ void intel_psr_init(struct drm_i915_private *dev_priv)
 
 	if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
 		dev_priv->psr.disable_source = vlv_psr_disable;
+		dev_priv->psr.enable_sink = vlv_psr_enable_sink;
 		dev_priv->psr.activate = vlv_psr_activate;
 		dev_priv->psr.setup_vsc = vlv_psr_setup_vsc;
 	} else {
 		dev_priv->psr.disable_source = hsw_psr_disable;
+		dev_priv->psr.enable_sink = hsw_psr_enable_sink;
 		dev_priv->psr.activate = hsw_psr_activate;
 		dev_priv->psr.setup_vsc = hsw_psr_setup_vsc;
 	}
-- 
2.13.2

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH 11/12] drm/i915/psr: Add enable_source vfunc.
  2017-07-12 19:20 [PATCH 00/12] PSR clean-up, new vfuncs and more use of HW tracking Rodrigo Vivi
                   ` (9 preceding siblings ...)
  2017-07-12 19:20 ` [PATCH 10/12] drm/i915/psr: Add enable_sink vfunc Rodrigo Vivi
@ 2017-07-12 19:20 ` Rodrigo Vivi
  2017-09-07 20:30   ` Pandiyan, Dhinakaran
  2017-07-12 19:20 ` [PATCH 12/12] drm/i915/psr: Use more PSR HW tracking Rodrigo Vivi
                   ` (4 subsequent siblings)
  15 siblings, 1 reply; 27+ messages in thread
From: Rodrigo Vivi @ 2017-07-12 19:20 UTC (permalink / raw)
  To: intel-gfx; +Cc: Daniel Vetter, Dhinakaran Pandiyan, Rodrigo Vivi

Continue on VPV PSR split with vfunc, let's also create one
for enabling source.

Also since we are touching *_enable_source functions let's
fix a comment with wrong name for vlv's one.

Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Cc: Jim Bride <jim.bride@linux.intel.com>
Cc: Vathsala NAgaraju <vathsala.nagaraju@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
 drivers/gpu/drm/i915/i915_drv.h  |  1 +
 drivers/gpu/drm/i915/intel_psr.c | 13 ++++---------
 2 files changed, 5 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 50b577b5e4d1..6a4d973e7fe9 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1146,6 +1146,7 @@ struct i915_psr {
 	bool colorimetry_support;
 	bool alpm;
 
+	void (*enable_source)(struct intel_dp *);
 	void (*disable_source)(struct intel_dp *);
 	void (*enable_sink)(struct intel_dp *);
 	void (*activate)(struct intel_dp *);
diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
index 73f7ba78f4d2..f4ceda6d6fd3 100644
--- a/drivers/gpu/drm/i915/intel_psr.c
+++ b/drivers/gpu/drm/i915/intel_psr.c
@@ -537,13 +537,7 @@ void intel_psr_enable(struct intel_dp *intel_dp)
 
 	dev_priv->psr.setup_vsc(intel_dp);
 	dev_priv->psr.enable_sink(intel_dp);
-
-	if (HAS_DDI(dev_priv)) {
-		hsw_psr_enable_source(intel_dp);
-	} else {
-		vlv_psr_enable_source(intel_dp);
-	}
-
+	dev_priv->psr.enable_source(intel_dp);
 	dev_priv->psr.enabled = intel_dp;
 
 	if (INTEL_GEN(dev_priv) >= 9)
@@ -770,8 +764,7 @@ static void intel_psr_exit(struct drm_i915_private *dev_priv)
 		 * directly once PSR State 4 that is active with single frame
 		 * update can be skipped. PSR_state 5 that is PSR exit then
 		 * Hardware is responsible to transition back to PSR_state 1
-		 * that is PSR inactive. Same state after
-		 * vlv_edp_psr_enable_source.
+		 * that is PSR inactive. Same state after vlv_psr_enable_source.
 		 */
 		val &= ~VLV_EDP_PSR_ACTIVE_ENTRY;
 		I915_WRITE(VLV_PSRCTL(pipe), val);
@@ -966,11 +959,13 @@ void intel_psr_init(struct drm_i915_private *dev_priv)
 	mutex_init(&dev_priv->psr.lock);
 
 	if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
+		dev_priv->psr.enable_source = vlv_psr_enable_source;
 		dev_priv->psr.disable_source = vlv_psr_disable;
 		dev_priv->psr.enable_sink = vlv_psr_enable_sink;
 		dev_priv->psr.activate = vlv_psr_activate;
 		dev_priv->psr.setup_vsc = vlv_psr_setup_vsc;
 	} else {
+		dev_priv->psr.enable_source = hsw_psr_enable_source;
 		dev_priv->psr.disable_source = hsw_psr_disable;
 		dev_priv->psr.enable_sink = hsw_psr_enable_sink;
 		dev_priv->psr.activate = hsw_psr_activate;
-- 
2.13.2

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH 12/12] drm/i915/psr: Use more PSR HW tracking.
  2017-07-12 19:20 [PATCH 00/12] PSR clean-up, new vfuncs and more use of HW tracking Rodrigo Vivi
                   ` (10 preceding siblings ...)
  2017-07-12 19:20 ` [PATCH 11/12] drm/i915/psr: Add enable_source vfunc Rodrigo Vivi
@ 2017-07-12 19:20 ` Rodrigo Vivi
  2017-07-12 19:37 ` ✗ Fi.CI.BAT: warning for PSR clean-up, new vfuncs and more use of " Patchwork
                   ` (3 subsequent siblings)
  15 siblings, 0 replies; 27+ messages in thread
From: Rodrigo Vivi @ 2017-07-12 19:20 UTC (permalink / raw)
  To: intel-gfx; +Cc: Dhinakaran Pandiyan, Rodrigo Vivi

So far we are using frontbuffer tracking for everything
and ignoring that PSR has a HW capable HW tracking for many
modern usages of GPU on Core platforms and newer Atom ones.

One reason for that is that we were trying to keep same
infrastructure in place for VLV/CHV than the rest of platforms.
But also because when this infrastructure was created
the front-buffer-tracking origin wasn't that good and stable
how it is today after Paulo reworked it to attend FBC cases.

However this PSR implementation without HW tracking died
on gen8LP. And newer platforms are starting to demand more HW
tracking specially with PSR2 cases in mind.

By disabling and re-enabling PSR totally every time we believe
someone is going to change the front buffer content we don't
allow PSR HW tracking to do this job and specially compromising
the whole idea of PSR2 case where the HW tracking detect only
the damaged area and do a partial screen update.

So, from now on, on the platforms that has hw_tracking let's
rely more on HW tracking.

This also is the case in used by other drivers and more validated
by SV teams. So I hope that this will lead us to less misterious
bugs.

v2: Only do this for platform that actually has hw tracking.

Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Cc: Jim Bride <jim.bride@linux.intel.com>
Cc: Vathsala NAgaraju <vathsala.nagaraju@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
 drivers/gpu/drm/i915/i915_drv.h          |  1 +
 drivers/gpu/drm/i915/intel_drv.h         |  3 ++-
 drivers/gpu/drm/i915/intel_frontbuffer.c |  2 +-
 drivers/gpu/drm/i915/intel_psr.c         | 12 +++++++++++-
 4 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 6a4d973e7fe9..a8c3a3151275 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1145,6 +1145,7 @@ struct i915_psr {
 	bool y_cord_support;
 	bool colorimetry_support;
 	bool alpm;
+	bool has_hw_tracking;
 
 	void (*enable_source)(struct intel_dp *);
 	void (*disable_source)(struct intel_dp *);
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index d17a32437f07..0ff5b1741b98 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -1738,7 +1738,8 @@ static inline void intel_backlight_device_unregister(struct intel_connector *con
 void intel_psr_enable(struct intel_dp *intel_dp);
 void intel_psr_disable(struct intel_dp *intel_dp);
 void intel_psr_invalidate(struct drm_i915_private *dev_priv,
-			  unsigned frontbuffer_bits);
+			  unsigned frontbuffer_bits,
+			  enum fb_op_origin origin);
 void intel_psr_flush(struct drm_i915_private *dev_priv,
 		     unsigned frontbuffer_bits,
 		     enum fb_op_origin origin);
diff --git a/drivers/gpu/drm/i915/intel_frontbuffer.c b/drivers/gpu/drm/i915/intel_frontbuffer.c
index fcfc217e754e..efda1af9a5b3 100644
--- a/drivers/gpu/drm/i915/intel_frontbuffer.c
+++ b/drivers/gpu/drm/i915/intel_frontbuffer.c
@@ -79,7 +79,7 @@ void __intel_fb_obj_invalidate(struct drm_i915_gem_object *obj,
 		spin_unlock(&dev_priv->fb_tracking.lock);
 	}
 
-	intel_psr_invalidate(dev_priv, frontbuffer_bits);
+	intel_psr_invalidate(dev_priv, frontbuffer_bits, origin);
 	intel_edp_drrs_invalidate(dev_priv, frontbuffer_bits);
 	intel_fbc_invalidate(dev_priv, frontbuffer_bits, origin);
 }
diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
index f4ceda6d6fd3..50035f24c63f 100644
--- a/drivers/gpu/drm/i915/intel_psr.c
+++ b/drivers/gpu/drm/i915/intel_psr.c
@@ -835,6 +835,7 @@ void intel_psr_single_frame_update(struct drm_i915_private *dev_priv,
  * intel_psr_invalidate - Invalidade PSR
  * @dev_priv: i915 device
  * @frontbuffer_bits: frontbuffer plane tracking bits
+ * @origin: which operation caused the invalidated
  *
  * Since the hardware frontbuffer tracking has gaps we need to integrate
  * with the software frontbuffer tracking. This function gets called every
@@ -844,7 +845,7 @@ void intel_psr_single_frame_update(struct drm_i915_private *dev_priv,
  * Dirty frontbuffers relevant to PSR are tracked in busy_frontbuffer_bits."
  */
 void intel_psr_invalidate(struct drm_i915_private *dev_priv,
-			  unsigned frontbuffer_bits)
+			  unsigned frontbuffer_bits, enum fb_op_origin origin)
 {
 	struct drm_crtc *crtc;
 	enum pipe pipe;
@@ -852,6 +853,10 @@ void intel_psr_invalidate(struct drm_i915_private *dev_priv,
 	if (!HAS_PSR(dev_priv))
 		return;
 
+	if (dev_priv->psr.has_hw_tracking &&
+	    (origin == ORIGIN_FLIP || origin == ORIGIN_CS))
+		return;
+
 	mutex_lock(&dev_priv->psr.lock);
 	if (!dev_priv->psr.enabled) {
 		mutex_unlock(&dev_priv->psr.lock);
@@ -892,6 +897,10 @@ void intel_psr_flush(struct drm_i915_private *dev_priv,
 	if (!HAS_PSR(dev_priv))
 		return;
 
+	if (dev_priv->psr.has_hw_tracking &&
+	    (origin == ORIGIN_FLIP || origin == ORIGIN_CS))
+		return;
+
 	mutex_lock(&dev_priv->psr.lock);
 	if (!dev_priv->psr.enabled) {
 		mutex_unlock(&dev_priv->psr.lock);
@@ -965,6 +974,7 @@ void intel_psr_init(struct drm_i915_private *dev_priv)
 		dev_priv->psr.activate = vlv_psr_activate;
 		dev_priv->psr.setup_vsc = vlv_psr_setup_vsc;
 	} else {
+		dev_priv->psr.has_hw_tracking = true;
 		dev_priv->psr.enable_source = hsw_psr_enable_source;
 		dev_priv->psr.disable_source = hsw_psr_disable;
 		dev_priv->psr.enable_sink = hsw_psr_enable_sink;
-- 
2.13.2

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* ✗ Fi.CI.BAT: warning for PSR clean-up, new vfuncs and more use of HW tracking.
  2017-07-12 19:20 [PATCH 00/12] PSR clean-up, new vfuncs and more use of HW tracking Rodrigo Vivi
                   ` (11 preceding siblings ...)
  2017-07-12 19:20 ` [PATCH 12/12] drm/i915/psr: Use more PSR HW tracking Rodrigo Vivi
@ 2017-07-12 19:37 ` Patchwork
  2017-07-14 16:38 ` ✗ Fi.CI.BAT: failure for PSR clean-up, new vfuncs and more use of HW tracking. (rev3) Patchwork
                   ` (2 subsequent siblings)
  15 siblings, 0 replies; 27+ messages in thread
From: Patchwork @ 2017-07-12 19:37 UTC (permalink / raw)
  To: Rodrigo Vivi; +Cc: intel-gfx

== Series Details ==

Series: PSR clean-up, new vfuncs and more use of HW tracking.
URL   : https://patchwork.freedesktop.org/series/27194/
State : warning

== Summary ==

Series 27194v1 PSR clean-up, new vfuncs and more use of HW tracking.
https://patchwork.freedesktop.org/api/1.0/series/27194/revisions/1/mbox/

Test kms_flip:
        Subgroup basic-flip-vs-modeset:
                pass       -> SKIP       (fi-skl-x1585l)
Test kms_pipe_crc_basic:
        Subgroup hang-read-crc-pipe-b:
                dmesg-warn -> PASS       (fi-pnv-d510) fdo#101597
        Subgroup suspend-read-crc-pipe-b:
                dmesg-warn -> PASS       (fi-byt-j1900) fdo#101705

fdo#101597 https://bugs.freedesktop.org/show_bug.cgi?id=101597
fdo#101705 https://bugs.freedesktop.org/show_bug.cgi?id=101705

fi-bdw-5557u     total:279  pass:268  dwarn:0   dfail:0   fail:0   skip:11  time:442s
fi-bdw-gvtdvm    total:279  pass:265  dwarn:0   dfail:0   fail:0   skip:14  time:429s
fi-blb-e6850     total:279  pass:224  dwarn:1   dfail:0   fail:0   skip:54  time:358s
fi-bsw-n3050     total:279  pass:243  dwarn:0   dfail:0   fail:0   skip:36  time:526s
fi-bxt-j4205     total:279  pass:260  dwarn:0   dfail:0   fail:0   skip:19  time:509s
fi-byt-j1900     total:279  pass:255  dwarn:0   dfail:0   fail:0   skip:24  time:490s
fi-byt-n2820     total:279  pass:250  dwarn:1   dfail:0   fail:0   skip:28  time:483s
fi-glk-2a        total:279  pass:260  dwarn:0   dfail:0   fail:0   skip:19  time:592s
fi-hsw-4770      total:279  pass:263  dwarn:0   dfail:0   fail:0   skip:16  time:438s
fi-hsw-4770r     total:279  pass:263  dwarn:0   dfail:0   fail:0   skip:16  time:412s
fi-ilk-650       total:279  pass:229  dwarn:0   dfail:0   fail:0   skip:50  time:422s
fi-ivb-3520m     total:279  pass:261  dwarn:0   dfail:0   fail:0   skip:18  time:487s
fi-ivb-3770      total:279  pass:261  dwarn:0   dfail:0   fail:0   skip:18  time:468s
fi-kbl-7500u     total:279  pass:261  dwarn:0   dfail:0   fail:0   skip:18  time:464s
fi-kbl-7560u     total:279  pass:269  dwarn:0   dfail:0   fail:0   skip:10  time:566s
fi-kbl-r         total:279  pass:260  dwarn:1   dfail:0   fail:0   skip:18  time:581s
fi-pnv-d510      total:279  pass:223  dwarn:1   dfail:0   fail:0   skip:55  time:565s
fi-skl-6260u     total:279  pass:269  dwarn:0   dfail:0   fail:0   skip:10  time:456s
fi-skl-6700hq    total:279  pass:262  dwarn:0   dfail:0   fail:0   skip:17  time:586s
fi-skl-6700k     total:279  pass:257  dwarn:4   dfail:0   fail:0   skip:18  time:469s
fi-skl-6770hq    total:279  pass:269  dwarn:0   dfail:0   fail:0   skip:10  time:487s
fi-skl-gvtdvm    total:279  pass:266  dwarn:0   dfail:0   fail:0   skip:13  time:434s
fi-skl-x1585l    total:279  pass:268  dwarn:0   dfail:0   fail:0   skip:11  time:477s
fi-snb-2520m     total:279  pass:251  dwarn:0   dfail:0   fail:0   skip:28  time:553s
fi-snb-2600      total:279  pass:250  dwarn:0   dfail:0   fail:0   skip:29  time:412s

8ad9e19aafea47c272163c2cbf554e06ff7f9857 drm-tip: 2017y-07m-11d-19h-08m-20s UTC integration manifest
576cd6a drm/i915/psr: Use more PSR HW tracking.
5f6296f drm/i915/psr: Add enable_source vfunc.
1323ed3 drm/i915/psr: Add enable_sink vfunc.
c3f23d2 drm/i915/psr: Add setup VSC vfunc.
0f41575 drm/i915/psr: Re-org Activate after enable
a00ce09 drm/i915/psr: Re-create a hsw_psr_enable_source.
322f67f drm/i915/psr: Unify VSC setup functions.
64ad7ca drm/i915/psr: Add activate vfunc.
a3309b7 drm/i915/psr: hsw_psr_activate.
2e3fd28 drm/i915/psr: vfunc for disabling source.
ef935e6 drm/i915/psr: Avoid any PSR stuff on platforms without support.
d5fcfc8 drm/i915/psr: Remove vlv_is_active function.

== Logs ==

For more details see: https://intel-gfx-ci.01.org/CI/Patchwork_5175/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 01/12] drm/i915/psr: Remove vlv_is_active function.
  2017-07-12 19:20 ` [PATCH 01/12] drm/i915/psr: Remove vlv_is_active function Rodrigo Vivi
@ 2017-07-12 19:56   ` Chris Wilson
  2017-07-12 21:07     ` Rodrigo Vivi
  0 siblings, 1 reply; 27+ messages in thread
From: Chris Wilson @ 2017-07-12 19:56 UTC (permalink / raw)
  To: intel-gfx; +Cc: Dhinakaran Pandiyan, Rodrigo Vivi

Quoting Rodrigo Vivi (2017-07-12 20:20:31)
> Let's start the clean-up and re-org of VLV PSR functions by
> removing an useless one.
> 
> Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> Cc: Jim Bride <jim.bride@linux.intel.com>
> Cc: Vathsala NAgaraju <vathsala.nagaraju@intel.com>
> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_psr.c | 16 ++++------------
>  1 file changed, 4 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
> index 559f1ab42bfc..1af4438a6095 100644
> --- a/drivers/gpu/drm/i915/intel_psr.c
> +++ b/drivers/gpu/drm/i915/intel_psr.c
> @@ -61,17 +61,6 @@ static bool is_edp_psr(struct intel_dp *intel_dp)
>         return intel_dp->psr_dpcd[0] & DP_PSR_IS_SUPPORTED;
>  }
>  
> -static bool vlv_is_psr_active_on_pipe(struct drm_device *dev, int pipe)
> -{
> -       struct drm_i915_private *dev_priv = to_i915(dev);
> -       uint32_t val;
> -
> -       val = I915_READ(VLV_PSRSTAT(pipe)) &
> -             VLV_EDP_PSR_CURR_STATE_MASK;
> -       return (val == VLV_EDP_PSR_ACTIVE_NORFB_UP) ||
> -              (val == VLV_EDP_PSR_ACTIVE_SF_UPDATE);
> -}
> -
>  static void intel_psr_write_vsc(struct intel_dp *intel_dp,
>                                 const struct edp_vsc_psr *vsc_psr)
>  {
> @@ -610,7 +599,10 @@ static void vlv_psr_disable(struct intel_dp *intel_dp)
>  
>                 dev_priv->psr.active = false;
>         } else {
> -               WARN_ON(vlv_is_psr_active_on_pipe(dev, intel_crtc->pipe));
> +               val = I915_READ(VLV_PSRSTAT(intel_crtc->pipe)) &
> +                       VLV_EDP_PSR_CURR_STATE_MASK;
> +               WARN_ON(val == VLV_EDP_PSR_ACTIVE_NORFB_UP ||
> +                       val == VLV_EDP_PSR_ACTIVE_SF_UPDATE);

The value here is in the warning message if it ever fails. Which is
clearer

	WARNING vlv_is_psr_active_on_pipe(dev, intel_crtc->pipe)

or

	WARNING val == VLV_EDP_PSR_ACTIVE_NORFB_UP || vall == VLV_EDP_ACTIVE_SF_UPDATE

followed by the stacktrace starting with vlv_psr_disable()? (And the
former is smaller .data!)
-Chris
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 01/12] drm/i915/psr: Remove vlv_is_active function.
  2017-07-12 19:56   ` Chris Wilson
@ 2017-07-12 21:07     ` Rodrigo Vivi
  0 siblings, 0 replies; 27+ messages in thread
From: Rodrigo Vivi @ 2017-07-12 21:07 UTC (permalink / raw)
  To: Chris Wilson; +Cc: intel-gfx, Dhinakaran Pandiyan, Rodrigo Vivi

On Wed, Jul 12, 2017 at 12:56 PM, Chris Wilson <chris@chris-wilson.co.uk> wrote:
> Quoting Rodrigo Vivi (2017-07-12 20:20:31)
>> Let's start the clean-up and re-org of VLV PSR functions by
>> removing an useless one.
>>
>> Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
>> Cc: Jim Bride <jim.bride@linux.intel.com>
>> Cc: Vathsala NAgaraju <vathsala.nagaraju@intel.com>
>> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
>> ---
>>  drivers/gpu/drm/i915/intel_psr.c | 16 ++++------------
>>  1 file changed, 4 insertions(+), 12 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
>> index 559f1ab42bfc..1af4438a6095 100644
>> --- a/drivers/gpu/drm/i915/intel_psr.c
>> +++ b/drivers/gpu/drm/i915/intel_psr.c
>> @@ -61,17 +61,6 @@ static bool is_edp_psr(struct intel_dp *intel_dp)
>>         return intel_dp->psr_dpcd[0] & DP_PSR_IS_SUPPORTED;
>>  }
>>
>> -static bool vlv_is_psr_active_on_pipe(struct drm_device *dev, int pipe)
>> -{
>> -       struct drm_i915_private *dev_priv = to_i915(dev);
>> -       uint32_t val;
>> -
>> -       val = I915_READ(VLV_PSRSTAT(pipe)) &
>> -             VLV_EDP_PSR_CURR_STATE_MASK;
>> -       return (val == VLV_EDP_PSR_ACTIVE_NORFB_UP) ||
>> -              (val == VLV_EDP_PSR_ACTIVE_SF_UPDATE);
>> -}
>> -
>>  static void intel_psr_write_vsc(struct intel_dp *intel_dp,
>>                                 const struct edp_vsc_psr *vsc_psr)
>>  {
>> @@ -610,7 +599,10 @@ static void vlv_psr_disable(struct intel_dp *intel_dp)
>>
>>                 dev_priv->psr.active = false;
>>         } else {
>> -               WARN_ON(vlv_is_psr_active_on_pipe(dev, intel_crtc->pipe));
>> +               val = I915_READ(VLV_PSRSTAT(intel_crtc->pipe)) &
>> +                       VLV_EDP_PSR_CURR_STATE_MASK;
>> +               WARN_ON(val == VLV_EDP_PSR_ACTIVE_NORFB_UP ||
>> +                       val == VLV_EDP_PSR_ACTIVE_SF_UPDATE);
>
> The value here is in the warning message if it ever fails. Which is
> clearer
>
>         WARNING vlv_is_psr_active_on_pipe(dev, intel_crtc->pipe)
>
> or
>
>         WARNING val == VLV_EDP_PSR_ACTIVE_NORFB_UP || vall == VLV_EDP_ACTIVE_SF_UPDATE
>
> followed by the stacktrace starting with vlv_psr_disable()? (And the
> former is smaller .data!)

good points...

so let's just discard this patch.

Thanks

> -Chris
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx



-- 
Rodrigo Vivi
Blog: http://blog.vivi.eng.br
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 07/12] drm/i915/psr: Re-create a hsw_psr_enable_source.
  2017-07-12 19:20 ` [PATCH 07/12] drm/i915/psr: Re-create a hsw_psr_enable_source Rodrigo Vivi
@ 2017-07-14 10:06   ` Jani Nikula
  2017-07-14 16:35     ` [PATCH 1/2] " Rodrigo Vivi
  0 siblings, 1 reply; 27+ messages in thread
From: Jani Nikula @ 2017-07-14 10:06 UTC (permalink / raw)
  To: intel-gfx; +Cc: Daniel Vetter, Dhinakaran Pandiyan, Rodrigo Vivi

On Wed, 12 Jul 2017, Rodrigo Vivi <rodrigo.vivi@intel.com> wrote:
> This sequence is part of enable source anyways, but they
> only need to be executed once and not on every activation,
> So let's re-create hsw_enable_source.
>
> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
> Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> Cc: Jim Bride <jim.bride@linux.intel.com>
> Cc: Vathsala NAgaraju <vathsala.nagaraju@intel.com>
> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_psr.c | 77 ++++++++++++++++++++++------------------
>  1 file changed, 43 insertions(+), 34 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
> index 2fbf803f0667..422033a6f9f6 100644
> --- a/drivers/gpu/drm/i915/intel_psr.c
> +++ b/drivers/gpu/drm/i915/intel_psr.c
> @@ -219,6 +219,47 @@ static void hsw_psr_enable_sink(struct intel_dp *intel_dp)
>  	I915_WRITE(aux_ctl_reg, aux_ctl);
>  }
>  
> +static void hsw_psr_enable_source(struct intel_dp *intel_dp)
> +{
> +	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
> +	struct drm_device *dev = dig_port->base.base.dev;
> +	struct drm_i915_private *dev_priv = to_i915(dev);
> +	struct intel_crtc *crtc = to_intel_crtc(dig_port->base.base.crtc);
> +	enum transcoder cpu_transcoder = crtc->config->cpu_transcoder;
> +
> +	u32 chicken;
> +
> +	if (dev_priv->psr.psr2_support) {
> +		chicken = PSR2_VSC_ENABLE_PROG_HEADER;
> +		if (dev_priv->psr.y_cord_support)
> +			chicken |= PSR2_ADD_VERTICAL_LINE_COUNT;
> +		I915_WRITE(CHICKEN_TRANS(cpu_transcoder), chicken);
> +		I915_WRITE(EDP_PSR_DEBUG_CTL,
> +			   EDP_PSR_DEBUG_MASK_MEMUP |
> +			   EDP_PSR_DEBUG_MASK_HPD |
> +			   EDP_PSR_DEBUG_MASK_LPSP |
> +			   EDP_PSR_DEBUG_MASK_MAX_SLEEP |
> +			   EDP_PSR_DEBUG_MASK_DISP_REG_WRITE);
> +	} else {
> +		/*
> +		 * Per Spec: Avoid continuous PSR exit by masking MEMUP
> +		 * and HPD. also mask LPSP to avoid dependency on other
> +		 * drivers that might block runtime_pm besides
> +		 * preventing  other hw tracking issues now we can rely
> +		 * on frontbuffer tracking.
> +		 */
> +		I915_WRITE(EDP_PSR_DEBUG_CTL,
> +			   EDP_PSR_DEBUG_MASK_MEMUP |
> +			   EDP_PSR_DEBUG_MASK_HPD |
> +			   EDP_PSR_DEBUG_MASK_LPSP);
> +	}
> +
> +	/*
> +	 * The rest of enable source sequence that should be here is actually
> +	 * executed during activation time. So check hsw_psr_activate().
> +	 */
> +}
> +
>  static void vlv_psr_enable_source(struct intel_dp *intel_dp)
>  {
>  	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
> @@ -474,9 +515,6 @@ void intel_psr_enable(struct intel_dp *intel_dp)
>  	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
>  	struct drm_device *dev = intel_dig_port->base.base.dev;
>  	struct drm_i915_private *dev_priv = to_i915(dev);
> -	struct intel_crtc *crtc = to_intel_crtc(intel_dig_port->base.base.crtc);
> -	enum transcoder cpu_transcoder = crtc->config->cpu_transcoder;
> -	u32 chicken;
>  
>  	if (!HAS_PSR(dev_priv))
>  		return;
> @@ -501,34 +539,11 @@ void intel_psr_enable(struct intel_dp *intel_dp)
>  
>  		hsw_psr_setup_vsc(intel_dp);
>  
> -		if (dev_priv->psr.psr2_support) {
> -			chicken = PSR2_VSC_ENABLE_PROG_HEADER;
> -			if (dev_priv->psr.y_cord_support)
> -				chicken |= PSR2_ADD_VERTICAL_LINE_COUNT;
> -			I915_WRITE(CHICKEN_TRANS(cpu_transcoder), chicken);
> -			I915_WRITE(EDP_PSR_DEBUG_CTL,
> -				   EDP_PSR_DEBUG_MASK_MEMUP |
> -				   EDP_PSR_DEBUG_MASK_HPD |
> -				   EDP_PSR_DEBUG_MASK_LPSP |
> -				   EDP_PSR_DEBUG_MASK_MAX_SLEEP |
> -				   EDP_PSR_DEBUG_MASK_DISP_REG_WRITE);
> -		} else {
> -			/*
> -			 * Per Spec: Avoid continuous PSR exit by masking MEMUP
> -			 * and HPD. also mask LPSP to avoid dependency on other
> -			 * drivers that might block runtime_pm besides
> -			 * preventing  other hw tracking issues now we can rely
> -			 * on frontbuffer tracking.
> -			 */
> -			I915_WRITE(EDP_PSR_DEBUG_CTL,
> -				   EDP_PSR_DEBUG_MASK_MEMUP |
> -				   EDP_PSR_DEBUG_MASK_HPD |
> -				   EDP_PSR_DEBUG_MASK_LPSP);
> -		}
> -
>  		/* Enable PSR on the panel */
>  		hsw_psr_enable_sink(intel_dp);
>  
> +		hsw_psr_enable_source(intel_dp);
> +

Wouldn't it be better to keep the order? Or have the order changed in a
separate patch if you need the order changed?

BR,
Jani.

>  		if (INTEL_GEN(dev_priv) >= 9)
>  			intel_psr_activate(intel_dp);
>  	} else {
> @@ -537,12 +552,6 @@ void intel_psr_enable(struct intel_dp *intel_dp)
>  		/* Enable PSR on the panel */
>  		vlv_psr_enable_sink(intel_dp);
>  
> -		/* On HSW+ enable_source also means go to PSR entry/active
> -		 * state as soon as idle_frame achieved and here would be
> -		 * to soon. However on VLV enable_source just enable PSR
> -		 * but let it on inactive state. So we might do this prior
> -		 * to active transition, i.e. here.
> -		 */
>  		vlv_psr_enable_source(intel_dp);
>  	}

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

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 08/12] drm/i915/psr: Re-org Activate after enable
  2017-07-12 19:20 ` [PATCH 08/12] drm/i915/psr: Re-org Activate after enable Rodrigo Vivi
@ 2017-07-14 10:07   ` Jani Nikula
  2017-07-14 16:40     ` [PATCH] " Rodrigo Vivi
  0 siblings, 1 reply; 27+ messages in thread
From: Jani Nikula @ 2017-07-14 10:07 UTC (permalink / raw)
  To: intel-gfx; +Cc: Daniel Vetter, Dhinakaran Pandiyan, Rodrigo Vivi

On Wed, 12 Jul 2017, Rodrigo Vivi <rodrigo.vivi@intel.com> wrote:
> Let's move the activation calls together after enable is done.
>
> No real functional change should be expected here. Just an attempt
> to get it clear when we are really activating PSR after enabling it.
>
> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
> Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> Cc: Jim Bride <jim.bride@linux.intel.com>
> Cc: Vathsala NAgaraju <vathsala.nagaraju@intel.com>
> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_psr.c | 29 +++++++++++++++--------------
>  1 file changed, 15 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
> index 422033a6f9f6..750df0172e8b 100644
> --- a/drivers/gpu/drm/i915/intel_psr.c
> +++ b/drivers/gpu/drm/i915/intel_psr.c
> @@ -543,9 +543,6 @@ void intel_psr_enable(struct intel_dp *intel_dp)
>  		hsw_psr_enable_sink(intel_dp);
>  
>  		hsw_psr_enable_source(intel_dp);
> -
> -		if (INTEL_GEN(dev_priv) >= 9)
> -			intel_psr_activate(intel_dp);
>  	} else {
>  		vlv_psr_setup_vsc(intel_dp);
>  
> @@ -555,20 +552,24 @@ void intel_psr_enable(struct intel_dp *intel_dp)
>  		vlv_psr_enable_source(intel_dp);
>  	}
>  
> -	/*
> -	 * FIXME: Activation should happen immediately since this function
> -	 * is just called after pipe is fully trained and enabled.
> -	 * However on every platform we face issues when first activation
> -	 * follows a modeset so quickly.
> -	 *     - On VLV/CHV we get bank screen on first activation
> -	 *     - On HSW/BDW we get a recoverable frozen screen until next
> -	 *       exit-activate sequence.
> -	 */
> -	if (INTEL_GEN(dev_priv) < 9)
> +	dev_priv->psr.enabled = intel_dp;
> +
> +	if (INTEL_GEN(dev_priv) >= 9)
> +		intel_psr_activate(intel_dp);
> +	else
> +		/*
> +		 * FIXME: Activation should happen immediately since this
> +		 * function is just called after pipe is fully trained and
> +		 * enabled.
> +		 * However on some platforms we face issues when first
> +		 * activation follows a modeset so quickly.
> +		 *     - On VLV/CHV we get bank screen on first activation
> +		 *     - On HSW/BDW we get a recoverable frozen screen until
> +		 *       next exit-activate sequence.
> +		 */
>  		schedule_delayed_work(&dev_priv->psr.work,
>  				      msecs_to_jiffies(intel_dp->panel_power_cycle_delay * 5));

While technically not required, I'd put curly braces around the branches
here for readability, because the comment is so long.

BR,
Jani.

>  
> -	dev_priv->psr.enabled = intel_dp;
>  unlock:
>  	mutex_unlock(&dev_priv->psr.lock);
>  }

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

^ permalink raw reply	[flat|nested] 27+ messages in thread

* [PATCH 1/2] drm/i915/psr: Re-create a hsw_psr_enable_source.
  2017-07-14 10:06   ` Jani Nikula
@ 2017-07-14 16:35     ` Rodrigo Vivi
  2017-07-14 16:35       ` [PATCH 2/2] drm/i915/psr: Move hsw_enable_source after enabling sink Rodrigo Vivi
  0 siblings, 1 reply; 27+ messages in thread
From: Rodrigo Vivi @ 2017-07-14 16:35 UTC (permalink / raw)
  To: intel-gfx; +Cc: Jani Nikula, Daniel Vetter, Rodrigo Vivi, Dhinakaran Pandiyan

This sequence is part of enable source anyways, but they
only need to be executed once and not on every activation,
So let's re-create hsw_enable_source.

v2: Avoid changing order here to avoid changing behaviour
    as suggested by Jani.

Cc: Jani Nikula <jani.nikula@intel.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Cc: Jim Bride <jim.bride@linux.intel.com>
Cc: Vathsala NAgaraju <vathsala.nagaraju@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
 drivers/gpu/drm/i915/intel_psr.c | 75 ++++++++++++++++++++++------------------
 1 file changed, 42 insertions(+), 33 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
index febaca1dec4b..3caf330017da 100644
--- a/drivers/gpu/drm/i915/intel_psr.c
+++ b/drivers/gpu/drm/i915/intel_psr.c
@@ -230,6 +230,47 @@ static void hsw_psr_enable_sink(struct intel_dp *intel_dp)
 	I915_WRITE(aux_ctl_reg, aux_ctl);
 }
 
+static void hsw_psr_enable_source(struct intel_dp *intel_dp)
+{
+	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
+	struct drm_device *dev = dig_port->base.base.dev;
+	struct drm_i915_private *dev_priv = to_i915(dev);
+	struct intel_crtc *crtc = to_intel_crtc(dig_port->base.base.crtc);
+	enum transcoder cpu_transcoder = crtc->config->cpu_transcoder;
+
+	u32 chicken;
+
+	if (dev_priv->psr.psr2_support) {
+		chicken = PSR2_VSC_ENABLE_PROG_HEADER;
+		if (dev_priv->psr.y_cord_support)
+			chicken |= PSR2_ADD_VERTICAL_LINE_COUNT;
+		I915_WRITE(CHICKEN_TRANS(cpu_transcoder), chicken);
+		I915_WRITE(EDP_PSR_DEBUG_CTL,
+			   EDP_PSR_DEBUG_MASK_MEMUP |
+			   EDP_PSR_DEBUG_MASK_HPD |
+			   EDP_PSR_DEBUG_MASK_LPSP |
+			   EDP_PSR_DEBUG_MASK_MAX_SLEEP |
+			   EDP_PSR_DEBUG_MASK_DISP_REG_WRITE);
+	} else {
+		/*
+		 * Per Spec: Avoid continuous PSR exit by masking MEMUP
+		 * and HPD. also mask LPSP to avoid dependency on other
+		 * drivers that might block runtime_pm besides
+		 * preventing  other hw tracking issues now we can rely
+		 * on frontbuffer tracking.
+		 */
+		I915_WRITE(EDP_PSR_DEBUG_CTL,
+			   EDP_PSR_DEBUG_MASK_MEMUP |
+			   EDP_PSR_DEBUG_MASK_HPD |
+			   EDP_PSR_DEBUG_MASK_LPSP);
+	}
+
+	/*
+	 * The rest of enable source sequence that should be here is actually
+	 * executed during activation time. So check hsw_psr_activate().
+	 */
+}
+
 static void vlv_psr_enable_source(struct intel_dp *intel_dp)
 {
 	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
@@ -485,9 +526,6 @@ void intel_psr_enable(struct intel_dp *intel_dp)
 	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
 	struct drm_device *dev = intel_dig_port->base.base.dev;
 	struct drm_i915_private *dev_priv = to_i915(dev);
-	struct intel_crtc *crtc = to_intel_crtc(intel_dig_port->base.base.crtc);
-	enum transcoder cpu_transcoder = crtc->config->cpu_transcoder;
-	u32 chicken;
 
 	if (!HAS_PSR(dev_priv))
 		return;
@@ -512,30 +550,7 @@ void intel_psr_enable(struct intel_dp *intel_dp)
 
 		hsw_psr_setup_vsc(intel_dp);
 
-		if (dev_priv->psr.psr2_support) {
-			chicken = PSR2_VSC_ENABLE_PROG_HEADER;
-			if (dev_priv->psr.y_cord_support)
-				chicken |= PSR2_ADD_VERTICAL_LINE_COUNT;
-			I915_WRITE(CHICKEN_TRANS(cpu_transcoder), chicken);
-			I915_WRITE(EDP_PSR_DEBUG_CTL,
-				   EDP_PSR_DEBUG_MASK_MEMUP |
-				   EDP_PSR_DEBUG_MASK_HPD |
-				   EDP_PSR_DEBUG_MASK_LPSP |
-				   EDP_PSR_DEBUG_MASK_MAX_SLEEP |
-				   EDP_PSR_DEBUG_MASK_DISP_REG_WRITE);
-		} else {
-			/*
-			 * Per Spec: Avoid continuous PSR exit by masking MEMUP
-			 * and HPD. also mask LPSP to avoid dependency on other
-			 * drivers that might block runtime_pm besides
-			 * preventing  other hw tracking issues now we can rely
-			 * on frontbuffer tracking.
-			 */
-			I915_WRITE(EDP_PSR_DEBUG_CTL,
-				   EDP_PSR_DEBUG_MASK_MEMUP |
-				   EDP_PSR_DEBUG_MASK_HPD |
-				   EDP_PSR_DEBUG_MASK_LPSP);
-		}
+		hsw_psr_enable_source(intel_dp);
 
 		/* Enable PSR on the panel */
 		hsw_psr_enable_sink(intel_dp);
@@ -548,12 +563,6 @@ void intel_psr_enable(struct intel_dp *intel_dp)
 		/* Enable PSR on the panel */
 		vlv_psr_enable_sink(intel_dp);
 
-		/* On HSW+ enable_source also means go to PSR entry/active
-		 * state as soon as idle_frame achieved and here would be
-		 * to soon. However on VLV enable_source just enable PSR
-		 * but let it on inactive state. So we might do this prior
-		 * to active transition, i.e. here.
-		 */
 		vlv_psr_enable_source(intel_dp);
 	}
 
-- 
2.13.2

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH 2/2] drm/i915/psr: Move hsw_enable_source after enabling sink.
  2017-07-14 16:35     ` [PATCH 1/2] " Rodrigo Vivi
@ 2017-07-14 16:35       ` Rodrigo Vivi
  0 siblings, 0 replies; 27+ messages in thread
From: Rodrigo Vivi @ 2017-07-14 16:35 UTC (permalink / raw)
  To: intel-gfx; +Cc: Jani Nikula, Daniel Vetter, Rodrigo Vivi, Dhinakaran Pandiyan

No functional change is expected here since at this point
PSR is not allowed to go to any active state. In other
words, not really enabled.

However let's do in a separated patch so it gets clear
on what is change and specially it can helps on bisect
case if we figure something has caused changes in behaviour.

But this needs to be done before we make the vfunc to
enable source to be in parity with VLV implementation.

Cc: Jani Nikula <jani.nikula@intel.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Cc: Jim Bride <jim.bride@linux.intel.com>
Cc: Vathsala NAgaraju <vathsala.nagaraju@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
 drivers/gpu/drm/i915/intel_psr.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
index 3caf330017da..c2c7afe6a902 100644
--- a/drivers/gpu/drm/i915/intel_psr.c
+++ b/drivers/gpu/drm/i915/intel_psr.c
@@ -550,11 +550,11 @@ void intel_psr_enable(struct intel_dp *intel_dp)
 
 		hsw_psr_setup_vsc(intel_dp);
 
-		hsw_psr_enable_source(intel_dp);
-
 		/* Enable PSR on the panel */
 		hsw_psr_enable_sink(intel_dp);
 
+		hsw_psr_enable_source(intel_dp);
+
 		if (INTEL_GEN(dev_priv) >= 9)
 			intel_psr_activate(intel_dp);
 	} else {
-- 
2.13.2

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* ✗ Fi.CI.BAT: failure for PSR clean-up, new vfuncs and more use of HW tracking. (rev3)
  2017-07-12 19:20 [PATCH 00/12] PSR clean-up, new vfuncs and more use of HW tracking Rodrigo Vivi
                   ` (12 preceding siblings ...)
  2017-07-12 19:37 ` ✗ Fi.CI.BAT: warning for PSR clean-up, new vfuncs and more use of " Patchwork
@ 2017-07-14 16:38 ` Patchwork
  2017-07-14 16:58 ` ✓ Fi.CI.BAT: success for PSR clean-up, new vfuncs and more use of HW tracking. (rev4) Patchwork
  2017-09-07 20:18 ` [PATCH 00/12] PSR clean-up, new vfuncs and more use of HW tracking Pandiyan, Dhinakaran
  15 siblings, 0 replies; 27+ messages in thread
From: Patchwork @ 2017-07-14 16:38 UTC (permalink / raw)
  To: Rodrigo Vivi; +Cc: intel-gfx

== Series Details ==

Series: PSR clean-up, new vfuncs and more use of HW tracking. (rev3)
URL   : https://patchwork.freedesktop.org/series/27194/
State : failure

== Summary ==

  CHK     include/config/kernel.release
  CHK     include/generated/uapi/linux/version.h
  CHK     include/generated/utsrelease.h
  CHK     include/generated/bounds.h
  CHK     include/generated/timeconst.h
  CHK     include/generated/asm-offsets.h
  CALL    scripts/checksyscalls.sh
  CHK     scripts/mod/devicetable-offsets.h
  CHK     include/generated/compile.h
  CHK     kernel/config_data.h
  CC [M]  drivers/gpu/drm/i915/intel_psr.o
drivers/gpu/drm/i915/intel_psr.c: In function ‘intel_psr_enable’:
drivers/gpu/drm/i915/intel_psr.c:547:1: error: expected expression before ‘<<’ token
 <<<<<<< 9e8f83846114215a62362801b9fb8a7908c35b6d
 ^
drivers/gpu/drm/i915/intel_psr.c:547:9: error: invalid suffix "f83846114215a62362801b9fb8a7908c35b6d" on floating constant
 <<<<<<< 9e8f83846114215a62362801b9fb8a7908c35b6d
         ^
drivers/gpu/drm/i915/intel_psr.c:550:1: error: expected expression before ‘==’ token
 =======
 ^
drivers/gpu/drm/i915/intel_psr.c:552:1: error: expected expression before ‘>>’ token
 >>>>>>> drm/i915/psr: Re-org Activate after enable
 ^
scripts/Makefile.build:302: recipe for target 'drivers/gpu/drm/i915/intel_psr.o' failed
make[4]: *** [drivers/gpu/drm/i915/intel_psr.o] Error 1
scripts/Makefile.build:561: recipe for target 'drivers/gpu/drm/i915' failed
make[3]: *** [drivers/gpu/drm/i915] Error 2
scripts/Makefile.build:561: recipe for target 'drivers/gpu/drm' failed
make[2]: *** [drivers/gpu/drm] Error 2
scripts/Makefile.build:561: recipe for target 'drivers/gpu' failed
make[1]: *** [drivers/gpu] Error 2
Makefile:1016: recipe for target 'drivers' failed
make: *** [drivers] Error 2

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 27+ messages in thread

* [PATCH] drm/i915/psr: Re-org Activate after enable
  2017-07-14 10:07   ` Jani Nikula
@ 2017-07-14 16:40     ` Rodrigo Vivi
  0 siblings, 0 replies; 27+ messages in thread
From: Rodrigo Vivi @ 2017-07-14 16:40 UTC (permalink / raw)
  To: intel-gfx; +Cc: Jani Nikula, Daniel Vetter, Rodrigo Vivi, Dhinakaran Pandiyan

Let's move the activation calls together after enable is done.

No real functional change should be expected here. Just an attempt
to get it clear when we are really activating PSR after enabling it.

v2: Add braces on if/else because commit message there is too long
    as suggested by Jani.

Cc: Jani Nikula <jani.nikula@intel.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Cc: Jim Bride <jim.bride@linux.intel.com>
Cc: Vathsala NAgaraju <vathsala.nagaraju@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
 drivers/gpu/drm/i915/intel_psr.c | 30 ++++++++++++++++--------------
 1 file changed, 16 insertions(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
index c2c7afe6a902..09e16768dacc 100644
--- a/drivers/gpu/drm/i915/intel_psr.c
+++ b/drivers/gpu/drm/i915/intel_psr.c
@@ -554,9 +554,6 @@ void intel_psr_enable(struct intel_dp *intel_dp)
 		hsw_psr_enable_sink(intel_dp);
 
 		hsw_psr_enable_source(intel_dp);
-
-		if (INTEL_GEN(dev_priv) >= 9)
-			intel_psr_activate(intel_dp);
 	} else {
 		vlv_psr_setup_vsc(intel_dp);
 
@@ -566,20 +563,25 @@ void intel_psr_enable(struct intel_dp *intel_dp)
 		vlv_psr_enable_source(intel_dp);
 	}
 
-	/*
-	 * FIXME: Activation should happen immediately since this function
-	 * is just called after pipe is fully trained and enabled.
-	 * However on every platform we face issues when first activation
-	 * follows a modeset so quickly.
-	 *     - On VLV/CHV we get bank screen on first activation
-	 *     - On HSW/BDW we get a recoverable frozen screen until next
-	 *       exit-activate sequence.
-	 */
-	if (INTEL_GEN(dev_priv) < 9)
+	dev_priv->psr.enabled = intel_dp;
+
+	if (INTEL_GEN(dev_priv) >= 9) {
+		intel_psr_activate(intel_dp);
+	} else {
+		/*
+		 * FIXME: Activation should happen immediately since this
+		 * function is just called after pipe is fully trained and
+		 * enabled.
+		 * However on some platforms we face issues when first
+		 * activation follows a modeset so quickly.
+		 *     - On VLV/CHV we get bank screen on first activation
+		 *     - On HSW/BDW we get a recoverable frozen screen until
+		 *       next exit-activate sequence.
+		 */
 		schedule_delayed_work(&dev_priv->psr.work,
 				      msecs_to_jiffies(intel_dp->panel_power_cycle_delay * 5));
+	}
 
-	dev_priv->psr.enabled = intel_dp;
 unlock:
 	mutex_unlock(&dev_priv->psr.lock);
 }
-- 
2.13.2

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* ✓ Fi.CI.BAT: success for PSR clean-up, new vfuncs and more use of HW tracking. (rev4)
  2017-07-12 19:20 [PATCH 00/12] PSR clean-up, new vfuncs and more use of HW tracking Rodrigo Vivi
                   ` (13 preceding siblings ...)
  2017-07-14 16:38 ` ✗ Fi.CI.BAT: failure for PSR clean-up, new vfuncs and more use of HW tracking. (rev3) Patchwork
@ 2017-07-14 16:58 ` Patchwork
  2017-09-07 20:18 ` [PATCH 00/12] PSR clean-up, new vfuncs and more use of HW tracking Pandiyan, Dhinakaran
  15 siblings, 0 replies; 27+ messages in thread
From: Patchwork @ 2017-07-14 16:58 UTC (permalink / raw)
  To: Rodrigo Vivi; +Cc: intel-gfx

== Series Details ==

Series: PSR clean-up, new vfuncs and more use of HW tracking. (rev4)
URL   : https://patchwork.freedesktop.org/series/27194/
State : success

== Summary ==

Series 27194v4 PSR clean-up, new vfuncs and more use of HW tracking.
https://patchwork.freedesktop.org/api/1.0/series/27194/revisions/4/mbox/

Test kms_cursor_legacy:
        Subgroup basic-busy-flip-before-cursor-atomic:
                pass       -> FAIL       (fi-snb-2600) fdo#100215
Test kms_flip:
        Subgroup basic-flip-vs-modeset:
                skip       -> PASS       (fi-skl-x1585l) fdo#101781

fdo#100215 https://bugs.freedesktop.org/show_bug.cgi?id=100215
fdo#101781 https://bugs.freedesktop.org/show_bug.cgi?id=101781

fi-bdw-5557u     total:279  pass:268  dwarn:0   dfail:0   fail:0   skip:11  time:444s
fi-bdw-gvtdvm    total:279  pass:265  dwarn:0   dfail:0   fail:0   skip:14  time:431s
fi-blb-e6850     total:279  pass:224  dwarn:1   dfail:0   fail:0   skip:54  time:355s
fi-bsw-n3050     total:279  pass:243  dwarn:0   dfail:0   fail:0   skip:36  time:527s
fi-bxt-j4205     total:279  pass:260  dwarn:0   dfail:0   fail:0   skip:19  time:511s
fi-byt-j1900     total:279  pass:254  dwarn:1   dfail:0   fail:0   skip:24  time:491s
fi-byt-n2820     total:279  pass:250  dwarn:1   dfail:0   fail:0   skip:28  time:486s
fi-glk-2a        total:279  pass:260  dwarn:0   dfail:0   fail:0   skip:19  time:595s
fi-hsw-4770      total:279  pass:263  dwarn:0   dfail:0   fail:0   skip:16  time:443s
fi-hsw-4770r     total:279  pass:263  dwarn:0   dfail:0   fail:0   skip:16  time:411s
fi-ilk-650       total:279  pass:229  dwarn:0   dfail:0   fail:0   skip:50  time:423s
fi-ivb-3520m     total:279  pass:261  dwarn:0   dfail:0   fail:0   skip:18  time:502s
fi-ivb-3770      total:279  pass:261  dwarn:0   dfail:0   fail:0   skip:18  time:472s
fi-kbl-7500u     total:279  pass:261  dwarn:0   dfail:0   fail:0   skip:18  time:468s
fi-kbl-7560u     total:279  pass:268  dwarn:1   dfail:0   fail:0   skip:10  time:572s
fi-kbl-r         total:279  pass:260  dwarn:1   dfail:0   fail:0   skip:18  time:576s
fi-pnv-d510      total:279  pass:222  dwarn:2   dfail:0   fail:0   skip:55  time:567s
fi-skl-6260u     total:279  pass:269  dwarn:0   dfail:0   fail:0   skip:10  time:454s
fi-skl-6700hq    total:279  pass:262  dwarn:0   dfail:0   fail:0   skip:17  time:589s
fi-skl-6700k     total:279  pass:257  dwarn:4   dfail:0   fail:0   skip:18  time:466s
fi-skl-6770hq    total:279  pass:269  dwarn:0   dfail:0   fail:0   skip:10  time:482s
fi-skl-gvtdvm    total:279  pass:266  dwarn:0   dfail:0   fail:0   skip:13  time:441s
fi-skl-x1585l    total:279  pass:269  dwarn:0   dfail:0   fail:0   skip:10  time:500s
fi-snb-2520m     total:279  pass:251  dwarn:0   dfail:0   fail:0   skip:28  time:546s
fi-snb-2600      total:279  pass:249  dwarn:0   dfail:0   fail:1   skip:29  time:408s

e1306e0d65a3a850838534019a9a61e73bf1efcc drm-tip: 2017y-07m-14d-13h-56m-32s UTC integration manifest
ee28d85 drm/i915/psr: Re-create a hsw_psr_enable_source.
8d81dca drm/i915/psr: Unify VSC setup functions.
fc23fed drm/i915/psr: Add activate vfunc.
bcf4fb1 drm/i915/psr: hsw_psr_activate.
621fdb1 drm/i915/psr: vfunc for disabling source.
bf733f4 drm/i915/psr: Avoid any PSR stuff on platforms without support.
61776f5 drm/i915/psr: Remove vlv_is_active function.

== Logs ==

For more details see: https://intel-gfx-ci.01.org/CI/Patchwork_5194/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 04/12] drm/i915/psr: hsw_psr_activate.
  2017-07-12 19:20 ` [PATCH 04/12] drm/i915/psr: hsw_psr_activate Rodrigo Vivi
@ 2017-09-07 20:07   ` Pandiyan, Dhinakaran
  0 siblings, 0 replies; 27+ messages in thread
From: Pandiyan, Dhinakaran @ 2017-09-07 20:07 UTC (permalink / raw)
  To: Vivi, Rodrigo; +Cc: intel-gfx@lists.freedesktop.org

On Wed, 2017-07-12 at 12:20 -0700, Rodrigo Vivi wrote:
> Oh HSW the real activate of PSR is decided by the source

Typos: On HSW+

> after certain amount of configured idle frames.
> 
> However for the driver perspective where we track psr.active
> variable this function here is the actual activate one. So
> let's rename it before moving to vfunc with that.
> 
> Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> Cc: Jim Bride <jim.bride@linux.intel.com>
> Cc: Vathsala NAgaraju <vathsala.nagaraju@intel.com>
> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_psr.c | 21 +++++++++++----------
>  1 file changed, 11 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
> index 535ea0b7ec20..45c640989a46 100644
> --- a/drivers/gpu/drm/i915/intel_psr.c
> +++ b/drivers/gpu/drm/i915/intel_psr.c
> @@ -254,7 +254,7 @@ static void vlv_psr_activate(struct intel_dp *intel_dp)
>  		   VLV_EDP_PSR_ACTIVE_ENTRY);
>  }
>  
> -static void intel_enable_source_psr1(struct intel_dp *intel_dp)
> +static void hsw_activate_psr1(struct intel_dp *intel_dp)
>  {
>  	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
>  	struct drm_device *dev = dig_port->base.base.dev;
> @@ -307,7 +307,7 @@ static void intel_enable_source_psr1(struct intel_dp *intel_dp)
>  	I915_WRITE(EDP_PSR_CTL, val);
>  }
>  
> -static void intel_enable_source_psr2(struct intel_dp *intel_dp)
> +static void hsw_activate_psr2(struct intel_dp *intel_dp)
>  {
>  	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
>  	struct drm_device *dev = dig_port->base.base.dev;
> @@ -343,17 +343,22 @@ static void intel_enable_source_psr2(struct intel_dp *intel_dp)
>  	I915_WRITE(EDP_PSR2_CTL, val);
>  }
>  
> -static void hsw_psr_enable_source(struct intel_dp *intel_dp)
> +static void hsw_psr_activate(struct intel_dp *intel_dp)
>  {
>  	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
>  	struct drm_device *dev = dig_port->base.base.dev;
>  	struct drm_i915_private *dev_priv = to_i915(dev);
>  
> +	/* On HSW+ after we enable PSR on source it will activate it
> +	 * as soon as it match configure idle_frame count. So
> +	 * we just actually enable it here on activation time.
> +	 */
> +
>  	/* psr1 and psr2 are mutually exclusive.*/
>  	if (dev_priv->psr.psr2_support)
> -		intel_enable_source_psr2(intel_dp);
> +		hsw_activate_psr2(intel_dp);
>  	else
> -		intel_enable_source_psr1(intel_dp);
> +		hsw_activate_psr1(intel_dp);
>  }
>  
>  static bool intel_psr_match_conditions(struct intel_dp *intel_dp)
> @@ -459,11 +464,7 @@ static void intel_psr_activate(struct intel_dp *intel_dp)
>  
>  	/* Enable/Re-enable PSR on the host */
>  	if (HAS_DDI(dev_priv))
> -		/* On HSW+ after we enable PSR on source it will activate it
> -		 * as soon as it match configure idle_frame count. So
> -		 * we just actually enable it here on activation time.
> -		 */
> -		hsw_psr_enable_source(intel_dp);
> +		hsw_psr_activate(intel_dp);
>  	else
>  		vlv_psr_activate(intel_dp);
>  
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 00/12] PSR clean-up, new vfuncs and more use of HW tracking.
  2017-07-12 19:20 [PATCH 00/12] PSR clean-up, new vfuncs and more use of HW tracking Rodrigo Vivi
                   ` (14 preceding siblings ...)
  2017-07-14 16:58 ` ✓ Fi.CI.BAT: success for PSR clean-up, new vfuncs and more use of HW tracking. (rev4) Patchwork
@ 2017-09-07 20:18 ` Pandiyan, Dhinakaran
  15 siblings, 0 replies; 27+ messages in thread
From: Pandiyan, Dhinakaran @ 2017-09-07 20:18 UTC (permalink / raw)
  To: Vivi, Rodrigo; +Cc: intel-gfx@lists.freedesktop.org

Sorry for the delayed review, this series needs to rebased as we are
passing crtc_state to a lot of these functions now. I don't see any
issues based on my cursory review.


On Wed, 2017-07-12 at 12:20 -0700, Rodrigo Vivi wrote:
> Most of patches on this series is only a clean up with
> no functional changes. The goal is to allow split VLV PSR
> implementation better. In a way that would get more cleaner
> when we use or not the hw tracking.
> 
> The ones with actual functional changes are:
> 0002-drm-i915-psr-Avoid-any-PSR-stuff-on-platforms-withou.patch
> that protects PSR of running anything on the platforms without support.
> 
> and
> 0012-drm-i915-psr-Use-more-PSR-HW-tracking.patch
> that allows us to use more HW tracking and consequently
> a proper PSR2 with partial screen updates.
> 
> Rodrigo Vivi (12):
>   drm/i915/psr: Remove vlv_is_active function.
>   drm/i915/psr: Avoid any PSR stuff on platforms without support.
>   drm/i915/psr: vfunc for disabling source.
>   drm/i915/psr: hsw_psr_activate.
>   drm/i915/psr: Add activate vfunc.
>   drm/i915/psr: Unify VSC setup functions.
>   drm/i915/psr: Re-create a hsw_psr_enable_source.
>   drm/i915/psr: Re-org Activate after enable
>   drm/i915/psr: Add setup VSC vfunc.
>   drm/i915/psr: Add enable_sink vfunc.
>   drm/i915/psr: Add enable_source vfunc.
>   drm/i915/psr: Use more PSR HW tracking.
> 
>  drivers/gpu/drm/i915/i915_drv.h          |   7 +
>  drivers/gpu/drm/i915/intel_drv.h         |   3 +-
>  drivers/gpu/drm/i915/intel_frontbuffer.c |   2 +-
>  drivers/gpu/drm/i915/intel_psr.c         | 267 ++++++++++++++++---------------
>  4 files changed, 150 insertions(+), 129 deletions(-)
> 
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 10/12] drm/i915/psr: Add enable_sink vfunc.
  2017-07-12 19:20 ` [PATCH 10/12] drm/i915/psr: Add enable_sink vfunc Rodrigo Vivi
@ 2017-09-07 20:29   ` Pandiyan, Dhinakaran
  0 siblings, 0 replies; 27+ messages in thread
From: Pandiyan, Dhinakaran @ 2017-09-07 20:29 UTC (permalink / raw)
  To: Vivi, Rodrigo; +Cc: daniel.vetter@ffwll.ch, intel-gfx@lists.freedesktop.org


On Wed, 2017-07-12 at 12:20 -0700, Rodrigo Vivi wrote:
> Continue on VPV PSR split with vfunc, let's also create one

Typo s/VPV/VLV

> for enabling sink.
> 
> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
> Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> Cc: Jim Bride <jim.bride@linux.intel.com>
> Cc: Vathsala NAgaraju <vathsala.nagaraju@intel.com>
> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> ---
>  drivers/gpu/drm/i915/i915_drv.h  | 1 +
>  drivers/gpu/drm/i915/intel_psr.c | 9 +++------
>  2 files changed, 4 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 326a0ef645c2..50b577b5e4d1 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -1147,6 +1147,7 @@ struct i915_psr {
>  	bool alpm;
>  
>  	void (*disable_source)(struct intel_dp *);
> +	void (*enable_sink)(struct intel_dp *);
>  	void (*activate)(struct intel_dp *);
>  	void (*setup_vsc)(struct intel_dp *);
>  };
> diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
> index b52e4da8a151..73f7ba78f4d2 100644
> --- a/drivers/gpu/drm/i915/intel_psr.c
> +++ b/drivers/gpu/drm/i915/intel_psr.c
> @@ -536,16 +536,11 @@ void intel_psr_enable(struct intel_dp *intel_dp)
>  	dev_priv->psr.busy_frontbuffer_bits = 0;
>  
>  	dev_priv->psr.setup_vsc(intel_dp);
> +	dev_priv->psr.enable_sink(intel_dp);
>  
>  	if (HAS_DDI(dev_priv)) {
> -		/* Enable PSR on the panel */
> -		hsw_psr_enable_sink(intel_dp);
> -
>  		hsw_psr_enable_source(intel_dp);
>  	} else {
> -		/* Enable PSR on the panel */
> -		vlv_psr_enable_sink(intel_dp);
> -
>  		vlv_psr_enable_source(intel_dp);
>  	}
>  
> @@ -972,10 +967,12 @@ void intel_psr_init(struct drm_i915_private *dev_priv)
>  
>  	if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
>  		dev_priv->psr.disable_source = vlv_psr_disable;
> +		dev_priv->psr.enable_sink = vlv_psr_enable_sink;
>  		dev_priv->psr.activate = vlv_psr_activate;
>  		dev_priv->psr.setup_vsc = vlv_psr_setup_vsc;
>  	} else {
>  		dev_priv->psr.disable_source = hsw_psr_disable;
> +		dev_priv->psr.enable_sink = hsw_psr_enable_sink;
>  		dev_priv->psr.activate = hsw_psr_activate;
>  		dev_priv->psr.setup_vsc = hsw_psr_setup_vsc;
>  	}
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 11/12] drm/i915/psr: Add enable_source vfunc.
  2017-07-12 19:20 ` [PATCH 11/12] drm/i915/psr: Add enable_source vfunc Rodrigo Vivi
@ 2017-09-07 20:30   ` Pandiyan, Dhinakaran
  0 siblings, 0 replies; 27+ messages in thread
From: Pandiyan, Dhinakaran @ 2017-09-07 20:30 UTC (permalink / raw)
  To: Vivi, Rodrigo; +Cc: daniel.vetter@ffwll.ch, intel-gfx@lists.freedesktop.org



On Wed, 2017-07-12 at 12:20 -0700, Rodrigo Vivi wrote:
> Continue on VPV PSR split with vfunc, let's also create one

Typo: s/VPV/VLV

> for enabling source.
> 
> Also since we are touching *_enable_source functions let's
> fix a comment with wrong name for vlv's one.
> 
> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
> Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> Cc: Jim Bride <jim.bride@linux.intel.com>
> Cc: Vathsala NAgaraju <vathsala.nagaraju@intel.com>
> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> ---
>  drivers/gpu/drm/i915/i915_drv.h  |  1 +
>  drivers/gpu/drm/i915/intel_psr.c | 13 ++++---------
>  2 files changed, 5 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 50b577b5e4d1..6a4d973e7fe9 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -1146,6 +1146,7 @@ struct i915_psr {
>  	bool colorimetry_support;
>  	bool alpm;
>  
> +	void (*enable_source)(struct intel_dp *);
>  	void (*disable_source)(struct intel_dp *);
>  	void (*enable_sink)(struct intel_dp *);
>  	void (*activate)(struct intel_dp *);
> diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
> index 73f7ba78f4d2..f4ceda6d6fd3 100644
> --- a/drivers/gpu/drm/i915/intel_psr.c
> +++ b/drivers/gpu/drm/i915/intel_psr.c
> @@ -537,13 +537,7 @@ void intel_psr_enable(struct intel_dp *intel_dp)
>  
>  	dev_priv->psr.setup_vsc(intel_dp);
>  	dev_priv->psr.enable_sink(intel_dp);
> -
> -	if (HAS_DDI(dev_priv)) {
> -		hsw_psr_enable_source(intel_dp);
> -	} else {
> -		vlv_psr_enable_source(intel_dp);
> -	}
> -
> +	dev_priv->psr.enable_source(intel_dp);
>  	dev_priv->psr.enabled = intel_dp;
>  
>  	if (INTEL_GEN(dev_priv) >= 9)
> @@ -770,8 +764,7 @@ static void intel_psr_exit(struct drm_i915_private *dev_priv)
>  		 * directly once PSR State 4 that is active with single frame
>  		 * update can be skipped. PSR_state 5 that is PSR exit then
>  		 * Hardware is responsible to transition back to PSR_state 1
> -		 * that is PSR inactive. Same state after
> -		 * vlv_edp_psr_enable_source.
> +		 * that is PSR inactive. Same state after vlv_psr_enable_source.
>  		 */
>  		val &= ~VLV_EDP_PSR_ACTIVE_ENTRY;
>  		I915_WRITE(VLV_PSRCTL(pipe), val);
> @@ -966,11 +959,13 @@ void intel_psr_init(struct drm_i915_private *dev_priv)
>  	mutex_init(&dev_priv->psr.lock);
>  
>  	if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
> +		dev_priv->psr.enable_source = vlv_psr_enable_source;
>  		dev_priv->psr.disable_source = vlv_psr_disable;
>  		dev_priv->psr.enable_sink = vlv_psr_enable_sink;
>  		dev_priv->psr.activate = vlv_psr_activate;
>  		dev_priv->psr.setup_vsc = vlv_psr_setup_vsc;
>  	} else {
> +		dev_priv->psr.enable_source = hsw_psr_enable_source;
>  		dev_priv->psr.disable_source = hsw_psr_disable;
>  		dev_priv->psr.enable_sink = hsw_psr_enable_sink;
>  		dev_priv->psr.activate = hsw_psr_activate;
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 27+ messages in thread

end of thread, other threads:[~2017-09-07 20:30 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-07-12 19:20 [PATCH 00/12] PSR clean-up, new vfuncs and more use of HW tracking Rodrigo Vivi
2017-07-12 19:20 ` [PATCH 01/12] drm/i915/psr: Remove vlv_is_active function Rodrigo Vivi
2017-07-12 19:56   ` Chris Wilson
2017-07-12 21:07     ` Rodrigo Vivi
2017-07-12 19:20 ` [PATCH 02/12] drm/i915/psr: Avoid any PSR stuff on platforms without support Rodrigo Vivi
2017-07-12 19:20 ` [PATCH 03/12] drm/i915/psr: vfunc for disabling source Rodrigo Vivi
2017-07-12 19:20 ` [PATCH 04/12] drm/i915/psr: hsw_psr_activate Rodrigo Vivi
2017-09-07 20:07   ` Pandiyan, Dhinakaran
2017-07-12 19:20 ` [PATCH 05/12] drm/i915/psr: Add activate vfunc Rodrigo Vivi
2017-07-12 19:20 ` [PATCH 06/12] drm/i915/psr: Unify VSC setup functions Rodrigo Vivi
2017-07-12 19:20 ` [PATCH 07/12] drm/i915/psr: Re-create a hsw_psr_enable_source Rodrigo Vivi
2017-07-14 10:06   ` Jani Nikula
2017-07-14 16:35     ` [PATCH 1/2] " Rodrigo Vivi
2017-07-14 16:35       ` [PATCH 2/2] drm/i915/psr: Move hsw_enable_source after enabling sink Rodrigo Vivi
2017-07-12 19:20 ` [PATCH 08/12] drm/i915/psr: Re-org Activate after enable Rodrigo Vivi
2017-07-14 10:07   ` Jani Nikula
2017-07-14 16:40     ` [PATCH] " Rodrigo Vivi
2017-07-12 19:20 ` [PATCH 09/12] drm/i915/psr: Add setup VSC vfunc Rodrigo Vivi
2017-07-12 19:20 ` [PATCH 10/12] drm/i915/psr: Add enable_sink vfunc Rodrigo Vivi
2017-09-07 20:29   ` Pandiyan, Dhinakaran
2017-07-12 19:20 ` [PATCH 11/12] drm/i915/psr: Add enable_source vfunc Rodrigo Vivi
2017-09-07 20:30   ` Pandiyan, Dhinakaran
2017-07-12 19:20 ` [PATCH 12/12] drm/i915/psr: Use more PSR HW tracking Rodrigo Vivi
2017-07-12 19:37 ` ✗ Fi.CI.BAT: warning for PSR clean-up, new vfuncs and more use of " Patchwork
2017-07-14 16:38 ` ✗ Fi.CI.BAT: failure for PSR clean-up, new vfuncs and more use of HW tracking. (rev3) Patchwork
2017-07-14 16:58 ` ✓ Fi.CI.BAT: success for PSR clean-up, new vfuncs and more use of HW tracking. (rev4) Patchwork
2017-09-07 20:18 ` [PATCH 00/12] PSR clean-up, new vfuncs and more use of HW tracking Pandiyan, Dhinakaran

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox