* [PATCH 0/9] PSR stability patches for HSW/BDW and VLV/CHV.
@ 2015-01-12 18:14 Rodrigo Vivi
2015-01-12 18:14 ` [PATCH 1/9] drm/i915: VLV/CHV PSR needs to exit PSR on every flush Rodrigo Vivi
` (8 more replies)
0 siblings, 9 replies; 19+ messages in thread
From: Rodrigo Vivi @ 2015-01-12 18:14 UTC (permalink / raw)
To: intel-gfx; +Cc: Rodrigo Vivi
Here goes my latest work on PSR for better stability.
Unfortunatelly I'm not enabling it by default yet because it still needs to be
intensivelly validated and there is one still pending flicker when I force link standby on
HSW & BDW.
Since I'm going to start the bug maintainance team now I'm sending this partial work that
I believe that is ready to be merged upstream right now.
The remaining issues will be fixed and it will be enabled soon.
Thanks,
Rodrigo.
Rodrigo Vivi (9):
drm/i915: VLV/CHV PSR needs to exit PSR on every flush.
drm/i915: PSR VLV/CHV: Remove condition checks that only applies to
Haswell.
drm/i915: PSR HSW/BDW: Fix inverted logic at sink main_link_active
bit.
drm/i915: Add missing vbt check.
drm/i915: group link_standby setup and let this info visible
everywhere.
drm/i915: PSR link standby at debugfs
drm/i915: PSR VLV/CHV: let's respect link_standby here as well.
drm/i915: PSR: respect vbt time for link trains when available.
drm/i915: PSR: Expose wakeup time.
drivers/gpu/drm/i915/i915_debugfs.c | 5 +++
drivers/gpu/drm/i915/i915_drv.h | 2 ++
drivers/gpu/drm/i915/intel_psr.c | 65 +++++++++++++++++++++----------------
3 files changed, 44 insertions(+), 28 deletions(-)
--
2.1.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH 1/9] drm/i915: VLV/CHV PSR needs to exit PSR on every flush.
2015-01-12 18:14 [PATCH 0/9] PSR stability patches for HSW/BDW and VLV/CHV Rodrigo Vivi
@ 2015-01-12 18:14 ` Rodrigo Vivi
2015-01-12 18:14 ` [PATCH 2/9] drm/i915: PSR VLV/CHV: Remove condition checks that only applies to Haswell Rodrigo Vivi
` (7 subsequent siblings)
8 siblings, 0 replies; 19+ messages in thread
From: Rodrigo Vivi @ 2015-01-12 18:14 UTC (permalink / raw)
To: intel-gfx; +Cc: Rodrigo Vivi
ON these platforms we don't have hardware tracking working for any case.
So we need to fake this on software by forcing psr to exit on every
flush.
Manual tests indicated this was needed.
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
drivers/gpu/drm/i915/intel_psr.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
index dd0e6e0..afb8b8c 100644
--- a/drivers/gpu/drm/i915/intel_psr.c
+++ b/drivers/gpu/drm/i915/intel_psr.c
@@ -620,13 +620,11 @@ void intel_psr_flush(struct drm_device *dev,
/*
* On Valleyview and Cherryview we don't use hardware tracking so
- * sprite plane updates or cursor moves don't result in a PSR
+ * any plane updates or cursor moves don't result in a PSR
* invalidating. Which means we need to manually fake this in
* software for all flushes, not just when we've seen a preceding
* invalidation through frontbuffer rendering. */
- if (!HAS_DDI(dev) &&
- ((frontbuffer_bits & INTEL_FRONTBUFFER_SPRITE(pipe)) ||
- (frontbuffer_bits & INTEL_FRONTBUFFER_CURSOR(pipe))))
+ if (!HAS_DDI(dev))
intel_psr_exit(dev);
if (!dev_priv->psr.active && !dev_priv->psr.busy_frontbuffer_bits)
--
2.1.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 2/9] drm/i915: PSR VLV/CHV: Remove condition checks that only applies to Haswell.
2015-01-12 18:14 [PATCH 0/9] PSR stability patches for HSW/BDW and VLV/CHV Rodrigo Vivi
2015-01-12 18:14 ` [PATCH 1/9] drm/i915: VLV/CHV PSR needs to exit PSR on every flush Rodrigo Vivi
@ 2015-01-12 18:14 ` Rodrigo Vivi
2015-01-12 18:14 ` [PATCH 3/9] drm/i915: PSR HSW/BDW: Fix inverted logic at sink main_link_active bit Rodrigo Vivi
` (6 subsequent siblings)
8 siblings, 0 replies; 19+ messages in thread
From: Rodrigo Vivi @ 2015-01-12 18:14 UTC (permalink / raw)
To: intel-gfx; +Cc: Rodrigo Vivi
These conditions applies only to Haswell and we were also checking for them
on Valleyview/Cherryview.
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
drivers/gpu/drm/i915/intel_psr.c | 13 +++++--------
1 file changed, 5 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
index afb8b8c..3dd8886 100644
--- a/drivers/gpu/drm/i915/intel_psr.c
+++ b/drivers/gpu/drm/i915/intel_psr.c
@@ -270,22 +270,19 @@ static bool intel_psr_match_conditions(struct intel_dp *intel_dp)
return false;
}
- /* Below limitations aren't valid for Broadwell */
- if (IS_BROADWELL(dev))
- goto out;
-
- if (I915_READ(HSW_STEREO_3D_CTL(intel_crtc->config.cpu_transcoder)) &
- S3D_ENABLE) {
+ if (IS_HASWELL(dev) &&
+ I915_READ(HSW_STEREO_3D_CTL(intel_crtc->config.cpu_transcoder)) &
+ S3D_ENABLE) {
DRM_DEBUG_KMS("PSR condition failed: Stereo 3D is Enabled\n");
return false;
}
- if (intel_crtc->config.adjusted_mode.flags & DRM_MODE_FLAG_INTERLACE) {
+ if (IS_HASWELL(dev) &&
+ intel_crtc->config.adjusted_mode.flags & DRM_MODE_FLAG_INTERLACE) {
DRM_DEBUG_KMS("PSR condition failed: Interlaced is Enabled\n");
return false;
}
- out:
dev_priv->psr.source_ok = true;
return true;
}
--
2.1.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 3/9] drm/i915: PSR HSW/BDW: Fix inverted logic at sink main_link_active bit.
2015-01-12 18:14 [PATCH 0/9] PSR stability patches for HSW/BDW and VLV/CHV Rodrigo Vivi
2015-01-12 18:14 ` [PATCH 1/9] drm/i915: VLV/CHV PSR needs to exit PSR on every flush Rodrigo Vivi
2015-01-12 18:14 ` [PATCH 2/9] drm/i915: PSR VLV/CHV: Remove condition checks that only applies to Haswell Rodrigo Vivi
@ 2015-01-12 18:14 ` Rodrigo Vivi
2015-01-13 14:24 ` R, Durgadoss
2015-01-12 18:14 ` [PATCH 4/9] drm/i915: Add missing vbt check Rodrigo Vivi
` (5 subsequent siblings)
8 siblings, 1 reply; 19+ messages in thread
From: Rodrigo Vivi @ 2015-01-12 18:14 UTC (permalink / raw)
To: intel-gfx; +Cc: Rodrigo Vivi
We have only two possible states with so many names and combinations that
might be confusing.
1 - Main link active / enabled / stand by / on
2 - Main link disabled / off / full off
Let's start organizing it by fixing a inverted logic when setting the sink bit.
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 3dd8886..0af89db 100644
--- a/drivers/gpu/drm/i915/intel_psr.c
+++ b/drivers/gpu/drm/i915/intel_psr.c
@@ -163,10 +163,10 @@ static void hsw_psr_enable_sink(struct intel_dp *intel_dp)
/* Enable PSR in sink */
if (intel_dp->psr_dpcd[1] & DP_PSR_NO_TRAIN_ON_EXIT || only_standby)
drm_dp_dpcd_writeb(&intel_dp->aux, DP_PSR_EN_CFG,
- DP_PSR_ENABLE & ~DP_PSR_MAIN_LINK_ACTIVE);
+ DP_PSR_ENABLE | DP_PSR_MAIN_LINK_ACTIVE);
else
drm_dp_dpcd_writeb(&intel_dp->aux, DP_PSR_EN_CFG,
- DP_PSR_ENABLE | DP_PSR_MAIN_LINK_ACTIVE);
+ DP_PSR_ENABLE & ~DP_PSR_MAIN_LINK_ACTIVE);
/* Setup AUX registers */
for (i = 0; i < sizeof(aux_msg); i += 4)
--
2.1.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 4/9] drm/i915: Add missing vbt check.
2015-01-12 18:14 [PATCH 0/9] PSR stability patches for HSW/BDW and VLV/CHV Rodrigo Vivi
` (2 preceding siblings ...)
2015-01-12 18:14 ` [PATCH 3/9] drm/i915: PSR HSW/BDW: Fix inverted logic at sink main_link_active bit Rodrigo Vivi
@ 2015-01-12 18:14 ` Rodrigo Vivi
2015-01-12 18:14 ` [PATCH 5/9] drm/i915: group link_standby setup and let this info visible everywhere Rodrigo Vivi
` (4 subsequent siblings)
8 siblings, 0 replies; 19+ messages in thread
From: Rodrigo Vivi @ 2015-01-12 18:14 UTC (permalink / raw)
To: intel-gfx; +Cc: Rodrigo Vivi
Let's respect vbt full_link (link_standby) on source side as well.
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
drivers/gpu/drm/i915/intel_psr.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
index 0af89db..20db835 100644
--- a/drivers/gpu/drm/i915/intel_psr.c
+++ b/drivers/gpu/drm/i915/intel_psr.c
@@ -226,7 +226,7 @@ static void hsw_psr_enable_source(struct intel_dp *intel_dp)
dev_priv->vbt.psr.idle_frames + 1 : 2;
uint32_t val = 0x0;
const uint32_t link_entry_time = EDP_PSR_MIN_LINK_ENTRY_TIME_8_LINES;
- bool only_standby = false;
+ bool only_standby = dev_priv->vbt.psr.full_link;
if (IS_BROADWELL(dev) && dig_port->port != PORT_A)
only_standby = true;
--
2.1.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 5/9] drm/i915: group link_standby setup and let this info visible everywhere.
2015-01-12 18:14 [PATCH 0/9] PSR stability patches for HSW/BDW and VLV/CHV Rodrigo Vivi
` (3 preceding siblings ...)
2015-01-12 18:14 ` [PATCH 4/9] drm/i915: Add missing vbt check Rodrigo Vivi
@ 2015-01-12 18:14 ` Rodrigo Vivi
2015-01-12 18:14 ` [PATCH 6/9] drm/i915: PSR link standby at debugfs Rodrigo Vivi
` (3 subsequent siblings)
8 siblings, 0 replies; 19+ messages in thread
From: Rodrigo Vivi @ 2015-01-12 18:14 UTC (permalink / raw)
To: intel-gfx; +Cc: Rodrigo Vivi
No functional changes on this patch. Just grouping the link_standy decision
to avoid miss any change and also making this info available everywhere
what will help to decide when to use vbt's tp time on following patch.
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
drivers/gpu/drm/i915/i915_drv.h | 1 +
drivers/gpu/drm/i915/intel_psr.c | 19 +++++++++----------
2 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index e008fa0..b4f01b4 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -789,6 +789,7 @@ struct i915_psr {
bool active;
struct delayed_work work;
unsigned busy_frontbuffer_bits;
+ bool link_standby;
};
enum intel_pch {
diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
index 20db835..5ae193e 100644
--- a/drivers/gpu/drm/i915/intel_psr.c
+++ b/drivers/gpu/drm/i915/intel_psr.c
@@ -143,7 +143,6 @@ static void hsw_psr_enable_sink(struct intel_dp *intel_dp)
struct drm_i915_private *dev_priv = dev->dev_private;
uint32_t aux_clock_divider;
int precharge = 0x3;
- bool only_standby = dev_priv->vbt.psr.full_link;
static const uint8_t aux_msg[] = {
[0] = DP_AUX_NATIVE_WRITE << 4,
[1] = DP_SET_POWER >> 8,
@@ -157,11 +156,8 @@ static void hsw_psr_enable_sink(struct intel_dp *intel_dp)
aux_clock_divider = intel_dp->get_aux_clock_divider(intel_dp, 0);
- if (IS_BROADWELL(dev) && dig_port->port != PORT_A)
- only_standby = true;
-
/* Enable PSR in sink */
- if (intel_dp->psr_dpcd[1] & DP_PSR_NO_TRAIN_ON_EXIT || only_standby)
+ if (dev_priv->psr.link_standby)
drm_dp_dpcd_writeb(&intel_dp->aux, DP_PSR_EN_CFG,
DP_PSR_ENABLE | DP_PSR_MAIN_LINK_ACTIVE);
else
@@ -226,12 +222,8 @@ static void hsw_psr_enable_source(struct intel_dp *intel_dp)
dev_priv->vbt.psr.idle_frames + 1 : 2;
uint32_t val = 0x0;
const uint32_t link_entry_time = EDP_PSR_MIN_LINK_ENTRY_TIME_8_LINES;
- bool only_standby = dev_priv->vbt.psr.full_link;
-
- if (IS_BROADWELL(dev) && dig_port->port != PORT_A)
- only_standby = true;
- if (intel_dp->psr_dpcd[1] & DP_PSR_NO_TRAIN_ON_EXIT || only_standby) {
+ if (dev_priv->psr.link_standby) {
val |= EDP_PSR_LINK_STANDBY;
val |= EDP_PSR_TP2_TP3_TIME_0us;
val |= EDP_PSR_TP1_TIME_0us;
@@ -341,6 +333,13 @@ void intel_psr_enable(struct intel_dp *intel_dp)
if (!intel_psr_match_conditions(intel_dp))
goto unlock;
+ /* First we check VBT, but we must respect sink and source
+ * known restrictions */
+ dev_priv->psr.link_standby = dev_priv->vbt.psr.full_link;
+ if ((intel_dp->psr_dpcd[1] & DP_PSR_NO_TRAIN_ON_EXIT) ||
+ (IS_BROADWELL(dev) && intel_dig_port->port != PORT_A))
+ dev_priv->psr.link_standby = true;
+
dev_priv->psr.busy_frontbuffer_bits = 0;
if (HAS_DDI(dev)) {
--
2.1.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 6/9] drm/i915: PSR link standby at debugfs
2015-01-12 18:14 [PATCH 0/9] PSR stability patches for HSW/BDW and VLV/CHV Rodrigo Vivi
` (4 preceding siblings ...)
2015-01-12 18:14 ` [PATCH 5/9] drm/i915: group link_standby setup and let this info visible everywhere Rodrigo Vivi
@ 2015-01-12 18:14 ` Rodrigo Vivi
2015-01-13 14:26 ` R, Durgadoss
2015-01-12 18:14 ` [PATCH 7/9] drm/i915: PSR VLV/CHV: let's respect link_standby here as well Rodrigo Vivi
` (2 subsequent siblings)
8 siblings, 1 reply; 19+ messages in thread
From: Rodrigo Vivi @ 2015-01-12 18:14 UTC (permalink / raw)
To: intel-gfx; +Cc: Rodrigo Vivi
It is useful to know at debug time if we are keeping main link on.
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
drivers/gpu/drm/i915/i915_debugfs.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index e515aad..0d11cbe 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -2248,6 +2248,9 @@ static int i915_edp_psr_status(struct seq_file *m, void *data)
}
seq_puts(m, "\n");
+ seq_printf(m, "Link standby: %s\n",
+ yesno((bool)dev_priv->psr.link_standby));
+
/* CHV PSR has no kind of performance counter */
if (HAS_PSR(dev) && HAS_DDI(dev)) {
psrperf = I915_READ(EDP_PSR_PERF_CNT(dev)) &
--
2.1.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 7/9] drm/i915: PSR VLV/CHV: let's respect link_standby here as well.
2015-01-12 18:14 [PATCH 0/9] PSR stability patches for HSW/BDW and VLV/CHV Rodrigo Vivi
` (5 preceding siblings ...)
2015-01-12 18:14 ` [PATCH 6/9] drm/i915: PSR link standby at debugfs Rodrigo Vivi
@ 2015-01-12 18:14 ` Rodrigo Vivi
2015-01-13 14:46 ` R, Durgadoss
2015-01-12 18:14 ` [PATCH 8/9] drm/i915: PSR: respect vbt time for link trains when available Rodrigo Vivi
2015-01-12 18:14 ` [PATCH 9/9] drm/i915: PSR: Expose wakeup time Rodrigo Vivi
8 siblings, 1 reply; 19+ messages in thread
From: Rodrigo Vivi @ 2015-01-12 18:14 UTC (permalink / raw)
To: intel-gfx; +Cc: Rodrigo Vivi
Let's respect vbt and panel for link_standby/on x link_disabled
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
drivers/gpu/drm/i915/intel_psr.c | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
index 5ae193e..313347a 100644
--- a/drivers/gpu/drm/i915/intel_psr.c
+++ b/drivers/gpu/drm/i915/intel_psr.c
@@ -132,8 +132,17 @@ static void hsw_psr_setup_vsc(struct intel_dp *intel_dp)
static void vlv_psr_enable_sink(struct intel_dp *intel_dp)
{
- drm_dp_dpcd_writeb(&intel_dp->aux, DP_PSR_EN_CFG,
- DP_PSR_ENABLE);
+ 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 = dev->dev_private;
+
+ /* Enable PSR in sink */
+ if (dev_priv->psr.link_standby)
+ drm_dp_dpcd_writeb(&intel_dp->aux, DP_PSR_EN_CFG,
+ DP_PSR_ENABLE | DP_PSR_MAIN_LINK_ACTIVE);
+ else
+ drm_dp_dpcd_writeb(&intel_dp->aux, DP_PSR_EN_CFG,
+ DP_PSR_ENABLE & ~DP_PSR_MAIN_LINK_ACTIVE);
}
static void hsw_psr_enable_sink(struct intel_dp *intel_dp)
@@ -183,11 +192,12 @@ static void vlv_psr_enable_source(struct intel_dp *intel_dp)
struct drm_i915_private *dev_priv = dev->dev_private;
struct drm_crtc *crtc = dig_port->base.base.crtc;
enum pipe pipe = to_intel_crtc(crtc)->pipe;
+ bool standby = dev_priv->psr.link_standby;
/* Transition from PSR_state 0 to PSR_state 1, i.e. PSR Inactive */
I915_WRITE(VLV_PSRCTL(pipe),
VLV_EDP_PSR_MODE_SW_TIMER |
- VLV_EDP_PSR_SRC_TRANSMITTER_STATE |
+ standby ? VLV_EDP_PSR_SRC_TRANSMITTER_STATE : 0 |
VLV_EDP_PSR_ENABLE);
}
--
2.1.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 8/9] drm/i915: PSR: respect vbt time for link trains when available.
2015-01-12 18:14 [PATCH 0/9] PSR stability patches for HSW/BDW and VLV/CHV Rodrigo Vivi
` (6 preceding siblings ...)
2015-01-12 18:14 ` [PATCH 7/9] drm/i915: PSR VLV/CHV: let's respect link_standby here as well Rodrigo Vivi
@ 2015-01-12 18:14 ` Rodrigo Vivi
2015-01-13 15:00 ` R, Durgadoss
2015-01-12 18:14 ` [PATCH 9/9] drm/i915: PSR: Expose wakeup time Rodrigo Vivi
8 siblings, 1 reply; 19+ messages in thread
From: Rodrigo Vivi @ 2015-01-12 18:14 UTC (permalink / raw)
To: intel-gfx; +Cc: Rodrigo Vivi
If link is off we need to give enough time for source to do link train.
This time is usually set at VBT.
VBT tp time comse in multiple of hundreds.
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
drivers/gpu/drm/i915/intel_psr.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
index 313347a..d1c2c31 100644
--- a/drivers/gpu/drm/i915/intel_psr.c
+++ b/drivers/gpu/drm/i915/intel_psr.c
@@ -603,6 +603,10 @@ void intel_psr_flush(struct drm_device *dev,
struct drm_i915_private *dev_priv = dev->dev_private;
struct drm_crtc *crtc;
enum pipe pipe;
+ bool link_on = dev_priv->psr.link_standby;
+ int tp = 100 * dev_priv->vbt.psr.tp2_tp3_wakeup_time +
+ 100 * dev_priv->vbt.psr.tp1_wakeup_time;
+ int delay = tp && !link_on ? tp : 100;
mutex_lock(&dev_priv->psr.lock);
if (!dev_priv->psr.enabled) {
@@ -635,7 +639,7 @@ void intel_psr_flush(struct drm_device *dev,
if (!dev_priv->psr.active && !dev_priv->psr.busy_frontbuffer_bits)
schedule_delayed_work(&dev_priv->psr.work,
- msecs_to_jiffies(100));
+ msecs_to_jiffies(delay));
mutex_unlock(&dev_priv->psr.lock);
}
--
2.1.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 9/9] drm/i915: PSR: Expose wakeup time.
2015-01-12 18:14 [PATCH 0/9] PSR stability patches for HSW/BDW and VLV/CHV Rodrigo Vivi
` (7 preceding siblings ...)
2015-01-12 18:14 ` [PATCH 8/9] drm/i915: PSR: respect vbt time for link trains when available Rodrigo Vivi
@ 2015-01-12 18:14 ` Rodrigo Vivi
2015-01-13 1:32 ` shuang.he
2015-01-15 0:55 ` Daniel Vetter
8 siblings, 2 replies; 19+ messages in thread
From: Rodrigo Vivi @ 2015-01-12 18:14 UTC (permalink / raw)
To: intel-gfx; +Cc: Rodrigo Vivi
This will be useful for automated test to know for how long to wait for PSR
to comeback before time out.
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
drivers/gpu/drm/i915/i915_debugfs.c | 2 ++
drivers/gpu/drm/i915/i915_drv.h | 1 +
drivers/gpu/drm/i915/intel_psr.c | 5 +++--
3 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index 0d11cbe..8823867 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -2250,6 +2250,8 @@ static int i915_edp_psr_status(struct seq_file *m, void *data)
seq_printf(m, "Link standby: %s\n",
yesno((bool)dev_priv->psr.link_standby));
+ seq_printf(m, "Wakeup time: %d ms\n",
+ dev_priv->psr.wakeup_time);
/* CHV PSR has no kind of performance counter */
if (HAS_PSR(dev) && HAS_DDI(dev)) {
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index b4f01b4..4b1d07d 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -790,6 +790,7 @@ struct i915_psr {
struct delayed_work work;
unsigned busy_frontbuffer_bits;
bool link_standby;
+ int wakeup_time;
};
enum intel_pch {
diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
index d1c2c31..3838921 100644
--- a/drivers/gpu/drm/i915/intel_psr.c
+++ b/drivers/gpu/drm/i915/intel_psr.c
@@ -606,7 +606,8 @@ void intel_psr_flush(struct drm_device *dev,
bool link_on = dev_priv->psr.link_standby;
int tp = 100 * dev_priv->vbt.psr.tp2_tp3_wakeup_time +
100 * dev_priv->vbt.psr.tp1_wakeup_time;
- int delay = tp && !link_on ? tp : 100;
+
+ dev_priv->psr.wakeup_time = tp && !link_on ? tp : 100;
mutex_lock(&dev_priv->psr.lock);
if (!dev_priv->psr.enabled) {
@@ -639,7 +640,7 @@ void intel_psr_flush(struct drm_device *dev,
if (!dev_priv->psr.active && !dev_priv->psr.busy_frontbuffer_bits)
schedule_delayed_work(&dev_priv->psr.work,
- msecs_to_jiffies(delay));
+ msecs_to_jiffies(dev_priv->psr.wakeup_time));
mutex_unlock(&dev_priv->psr.lock);
}
--
2.1.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 19+ messages in thread
* Re: [PATCH 9/9] drm/i915: PSR: Expose wakeup time.
2015-01-12 18:14 ` [PATCH 9/9] drm/i915: PSR: Expose wakeup time Rodrigo Vivi
@ 2015-01-13 1:32 ` shuang.he
2015-01-15 0:55 ` Daniel Vetter
1 sibling, 0 replies; 19+ messages in thread
From: shuang.he @ 2015-01-13 1:32 UTC (permalink / raw)
To: shuang.he, ethan.gao, intel-gfx, rodrigo.vivi
Tested-By: PRC QA PRTS (Patch Regression Test System Contact: shuang.he@intel.com)
-------------------------------------Summary-------------------------------------
Platform Delta drm-intel-nightly Series Applied
PNV 354/354 354/354
ILK 354/354 354/354
SNB +1-1 401/424 401/424
IVB 488/488 488/488
BYT 278/278 278/278
HSW -41 529/529 488/529
BDW -1 405/405 404/405
-------------------------------------Detailed-------------------------------------
Platform Test drm-intel-nightly Series Applied
SNB igt_kms_flip_flip-vs-dpms-off-vs-modeset-interruptible NSPT(1, M35)PASS(6, M35M22) PASS(1, M22)
*SNB igt_gem_concurrent_blit_gtt-rcs-early-read-interruptible PASS(7, M35M22) DMESG_WARN(1, M22)
HSW igt_kms_cursor_crc_cursor-size-change NSPT(3, M40M19)PASS(1, M20) NSPT(1, M40)
HSW igt_kms_fence_pin_leak NSPT(3, M40M19)PASS(1, M20) NSPT(1, M40)
HSW igt_kms_flip_event_leak NSPT(3, M40M19)PASS(1, M20) NSPT(1, M40)
HSW igt_kms_mmio_vs_cs_flip_setcrtc_vs_cs_flip NSPT(3, M40M19)PASS(1, M20) NSPT(1, M40)
HSW igt_kms_mmio_vs_cs_flip_setplane_vs_cs_flip NSPT(3, M40M19)PASS(1, M20) NSPT(1, M40)
HSW igt_pm_lpsp_non-edp NSPT(3, M40M19)PASS(1, M20) NSPT(1, M40)
HSW igt_pm_rpm_cursor NSPT(3, M40M19)PASS(1, M20) NSPT(1, M40)
HSW igt_pm_rpm_cursor-dpms NSPT(3, M40M19)PASS(1, M20) NSPT(1, M40)
HSW igt_pm_rpm_dpms-mode-unset-non-lpsp NSPT(3, M40M19)PASS(1, M20) NSPT(1, M40)
HSW igt_pm_rpm_dpms-non-lpsp NSPT(3, M40M19)PASS(1, M20) NSPT(1, M40)
HSW igt_pm_rpm_drm-resources-equal NSPT(3, M40M19)PASS(1, M20) NSPT(1, M40)
HSW igt_pm_rpm_fences NSPT(3, M40M19)PASS(1, M20) NSPT(1, M40)
HSW igt_pm_rpm_fences-dpms NSPT(3, M40M19)PASS(1, M20) NSPT(1, M40)
HSW igt_pm_rpm_gem-execbuf NSPT(3, M40M19)PASS(1, M20) NSPT(1, M40)
HSW igt_pm_rpm_gem-mmap-cpu NSPT(3, M40M19)PASS(1, M20) NSPT(1, M40)
HSW igt_pm_rpm_gem-mmap-gtt NSPT(3, M40M19)PASS(1, M20) NSPT(1, M40)
HSW igt_pm_rpm_gem-pread NSPT(3, M40M19)PASS(1, M20) NSPT(1, M40)
HSW igt_pm_rpm_i2c NSPT(3, M40M19)PASS(1, M20) NSPT(1, M40)
HSW igt_pm_rpm_modeset-non-lpsp NSPT(3, M40M19)PASS(1, M20) NSPT(1, M40)
HSW igt_pm_rpm_modeset-non-lpsp-stress-no-wait NSPT(3, M40M19)PASS(1, M20) NSPT(1, M40)
HSW igt_pm_rpm_pci-d3-state NSPT(3, M40M19)PASS(1, M20) NSPT(1, M40)
HSW igt_pm_rpm_rte NSPT(3, M40M19)PASS(1, M20) NSPT(1, M40)
HSW igt_gem_concurrent_blit_gtt-bcs-early-read-forked DMESG_WARN(3, M40M19)PASS(1, M20) DMESG_WARN(1, M40)
HSW igt_gem_concurrent_blit_gtt-bcs-early-read-interruptible DMESG_WARN(3, M40M19)PASS(1, M20) DMESG_WARN(1, M40)
HSW igt_gem_concurrent_blit_gtt-bcs-gpu-read-after-write-forked DMESG_WARN(3, M40M19)PASS(1, M20) DMESG_WARN(1, M40)
HSW igt_gem_concurrent_blit_gtt-bcs-gpu-read-after-write-interruptible DMESG_WARN(3, M40M19)PASS(1, M20) DMESG_WARN(1, M40)
HSW igt_gem_concurrent_blit_gtt-bcs-overwrite-source-forked DMESG_WARN(3, M40M19)PASS(1, M20) DMESG_WARN(1, M40)
HSW igt_gem_concurrent_blit_gtt-bcs-overwrite-source-interruptible DMESG_WARN(3, M40M19)PASS(1, M20) DMESG_WARN(1, M40)
HSW igt_gem_concurrent_blit_gtt-rcs-early-read-forked DMESG_WARN(3, M40M19)PASS(1, M20) DMESG_WARN(1, M40)
HSW igt_gem_concurrent_blit_gtt-rcs-early-read-interruptible DMESG_WARN(3, M40M19)PASS(1, M20) DMESG_WARN(1, M40)
HSW igt_gem_concurrent_blit_gtt-rcs-gpu-read-after-write-forked DMESG_WARN(3, M40M19)PASS(1, M20) DMESG_WARN(1, M40)
HSW igt_gem_concurrent_blit_gtt-rcs-gpu-read-after-write-interruptible DMESG_WARN(3, M40M19)PASS(1, M20) DMESG_WARN(1, M40)
HSW igt_gem_concurrent_blit_gtt-rcs-overwrite-source-forked DMESG_WARN(3, M40M19)PASS(1, M20) DMESG_WARN(1, M40)
HSW igt_gem_concurrent_blit_gtt-rcs-overwrite-source-interruptible DMESG_WARN(3, M40M19)PASS(1, M20) DMESG_WARN(1, M40)
HSW igt_gem_concurrent_blit_gttX-bcs-early-read-interruptible DMESG_WARN(2, M40)PASS(2, M20M19) DMESG_WARN(1, M40)
HSW igt_gem_concurrent_blit_gttX-bcs-gpu-read-after-write-interruptible DMESG_WARN(3, M40M19)PASS(1, M20) DMESG_WARN(1, M40)
HSW igt_gem_concurrent_blit_gttX-bcs-overwrite-source-forked DMESG_WARN(3, M40M19)PASS(1, M20) DMESG_WARN(1, M40)
HSW igt_gem_concurrent_blit_gttX-bcs-overwrite-source-interruptible DMESG_WARN(3, M40M19)PASS(1, M20) DMESG_WARN(1, M40)
HSW igt_gem_concurrent_blit_gttX-rcs-early-read-interruptible DMESG_WARN(3, M40M19)PASS(1, M20) DMESG_WARN(1, M40)
HSW igt_gem_concurrent_blit_gttX-rcs-gpu-read-after-write-interruptible DMESG_WARN(3, M40M19)PASS(1, M20) DMESG_WARN(1, M40)
HSW igt_gem_concurrent_blit_gttX-rcs-overwrite-source-forked DMESG_WARN(3, M40M19)PASS(1, M20) DMESG_WARN(1, M40)
*BDW igt_gem_concurrent_blit_gtt-bcs-gpu-read-after-write-interruptible PASS(6, M30M28) DMESG_WARN(1, M28)
Note: You need to pay more attention to line start with '*'
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 3/9] drm/i915: PSR HSW/BDW: Fix inverted logic at sink main_link_active bit.
2015-01-12 18:14 ` [PATCH 3/9] drm/i915: PSR HSW/BDW: Fix inverted logic at sink main_link_active bit Rodrigo Vivi
@ 2015-01-13 14:24 ` R, Durgadoss
2015-01-13 22:26 ` Daniel Vetter
0 siblings, 1 reply; 19+ messages in thread
From: R, Durgadoss @ 2015-01-13 14:24 UTC (permalink / raw)
To: intel-gfx; +Cc: Vivi, Rodrigo
Hi Rodrigo,
>-----Original Message-----
>From: Intel-gfx [mailto:intel-gfx-bounces@lists.freedesktop.org] On Behalf Of Rodrigo Vivi
>Sent: Monday, January 12, 2015 11:45 PM
>To: intel-gfx@lists.freedesktop.org
>Cc: Vivi, Rodrigo
>Subject: [Intel-gfx] [PATCH 3/9] drm/i915: PSR HSW/BDW: Fix inverted logic at sink main_link_active bit.
>
>We have only two possible states with so many names and combinations that
>might be confusing.
>
>1 - Main link active / enabled / stand by / on
>2 - Main link disabled / off / full off
In this case, I think we should use 'link_active' instead of 'link_standby'
since 'active' is what is used by the eDP spec and most of our PSR
macros. But, I believe we can have this as a separate patch.
For patches 1-3,
Reviewed-by: Durgadoss R <durgadoss.r@intel.com>
Thanks,
Durga
>
>Let's start organizing it by fixing a inverted logic when setting the sink bit.
>
>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 3dd8886..0af89db 100644
>--- a/drivers/gpu/drm/i915/intel_psr.c
>+++ b/drivers/gpu/drm/i915/intel_psr.c
>@@ -163,10 +163,10 @@ static void hsw_psr_enable_sink(struct intel_dp *intel_dp)
> /* Enable PSR in sink */
> if (intel_dp->psr_dpcd[1] & DP_PSR_NO_TRAIN_ON_EXIT || only_standby)
> drm_dp_dpcd_writeb(&intel_dp->aux, DP_PSR_EN_CFG,
>- DP_PSR_ENABLE & ~DP_PSR_MAIN_LINK_ACTIVE);
>+ DP_PSR_ENABLE | DP_PSR_MAIN_LINK_ACTIVE);
> else
> drm_dp_dpcd_writeb(&intel_dp->aux, DP_PSR_EN_CFG,
>- DP_PSR_ENABLE | DP_PSR_MAIN_LINK_ACTIVE);
>+ DP_PSR_ENABLE & ~DP_PSR_MAIN_LINK_ACTIVE);
>
> /* Setup AUX registers */
> for (i = 0; i < sizeof(aux_msg); i += 4)
>--
>2.1.0
>
>_______________________________________________
>Intel-gfx mailing list
>Intel-gfx@lists.freedesktop.org
>http://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 6/9] drm/i915: PSR link standby at debugfs
2015-01-12 18:14 ` [PATCH 6/9] drm/i915: PSR link standby at debugfs Rodrigo Vivi
@ 2015-01-13 14:26 ` R, Durgadoss
0 siblings, 0 replies; 19+ messages in thread
From: R, Durgadoss @ 2015-01-13 14:26 UTC (permalink / raw)
To: intel-gfx; +Cc: Vivi, Rodrigo
>-----Original Message-----
>From: Intel-gfx [mailto:intel-gfx-bounces@lists.freedesktop.org] On Behalf Of Rodrigo Vivi
>Sent: Monday, January 12, 2015 11:45 PM
>To: intel-gfx@lists.freedesktop.org
>Cc: Vivi, Rodrigo
>Subject: [Intel-gfx] [PATCH 6/9] drm/i915: PSR link standby at debugfs
>
>It is useful to know at debug time if we are keeping main link on.
>
>Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
For patches, 4-6,
Reviewed-by: Durgadoss R <durgadoss.r@intel.com>
Thanks,
Durga
>---
> drivers/gpu/drm/i915/i915_debugfs.c | 3 +++
> 1 file changed, 3 insertions(+)
>
>diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
>index e515aad..0d11cbe 100644
>--- a/drivers/gpu/drm/i915/i915_debugfs.c
>+++ b/drivers/gpu/drm/i915/i915_debugfs.c
>@@ -2248,6 +2248,9 @@ static int i915_edp_psr_status(struct seq_file *m, void *data)
> }
> seq_puts(m, "\n");
>
>+ seq_printf(m, "Link standby: %s\n",
>+ yesno((bool)dev_priv->psr.link_standby));
>+
> /* CHV PSR has no kind of performance counter */
> if (HAS_PSR(dev) && HAS_DDI(dev)) {
> psrperf = I915_READ(EDP_PSR_PERF_CNT(dev)) &
>--
>2.1.0
>
>_______________________________________________
>Intel-gfx mailing list
>Intel-gfx@lists.freedesktop.org
>http://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 7/9] drm/i915: PSR VLV/CHV: let's respect link_standby here as well.
2015-01-12 18:14 ` [PATCH 7/9] drm/i915: PSR VLV/CHV: let's respect link_standby here as well Rodrigo Vivi
@ 2015-01-13 14:46 ` R, Durgadoss
2015-01-14 22:43 ` Rodrigo Vivi
0 siblings, 1 reply; 19+ messages in thread
From: R, Durgadoss @ 2015-01-13 14:46 UTC (permalink / raw)
To: intel-gfx; +Cc: Vivi, Rodrigo
>-----Original Message-----
>From: Intel-gfx [mailto:intel-gfx-bounces@lists.freedesktop.org] On Behalf Of Rodrigo Vivi
>Sent: Monday, January 12, 2015 11:45 PM
>To: intel-gfx@lists.freedesktop.org
>Cc: Vivi, Rodrigo
>Subject: [Intel-gfx] [PATCH 7/9] drm/i915: PSR VLV/CHV: let's respect link_standby here as well.
>
>Let's respect vbt and panel for link_standby/on x link_disabled
>
>Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
>---
> drivers/gpu/drm/i915/intel_psr.c | 16 +++++++++++++---
> 1 file changed, 13 insertions(+), 3 deletions(-)
>
>diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
>index 5ae193e..313347a 100644
>--- a/drivers/gpu/drm/i915/intel_psr.c
>+++ b/drivers/gpu/drm/i915/intel_psr.c
>@@ -132,8 +132,17 @@ static void hsw_psr_setup_vsc(struct intel_dp *intel_dp)
>
> static void vlv_psr_enable_sink(struct intel_dp *intel_dp)
> {
>- drm_dp_dpcd_writeb(&intel_dp->aux, DP_PSR_EN_CFG,
>- DP_PSR_ENABLE);
>+ 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 = dev->dev_private;
>+
>+ /* Enable PSR in sink */
>+ if (dev_priv->psr.link_standby)
>+ drm_dp_dpcd_writeb(&intel_dp->aux, DP_PSR_EN_CFG,
>+ DP_PSR_ENABLE | DP_PSR_MAIN_LINK_ACTIVE);
>+ else
>+ drm_dp_dpcd_writeb(&intel_dp->aux, DP_PSR_EN_CFG,
>+ DP_PSR_ENABLE & ~DP_PSR_MAIN_LINK_ACTIVE);
> }
>
> static void hsw_psr_enable_sink(struct intel_dp *intel_dp)
>@@ -183,11 +192,12 @@ static void vlv_psr_enable_source(struct intel_dp *intel_dp)
> struct drm_i915_private *dev_priv = dev->dev_private;
> struct drm_crtc *crtc = dig_port->base.base.crtc;
> enum pipe pipe = to_intel_crtc(crtc)->pipe;
>+ bool standby = dev_priv->psr.link_standby;
>
> /* Transition from PSR_state 0 to PSR_state 1, i.e. PSR Inactive */
> I915_WRITE(VLV_PSRCTL(pipe),
> VLV_EDP_PSR_MODE_SW_TIMER |
>- VLV_EDP_PSR_SRC_TRANSMITTER_STATE |
>+ standby ? VLV_EDP_PSR_SRC_TRANSMITTER_STATE : 0 |
Apart from VBT, this also depends on the Panel DPCD 71h.
If bit 0 of 71h is 0, we may need Link training to exit PSR,
If main link is off.
So, unless we try it out on various panels and
are confident about it, I suggest we keep this
TRANSMITTER_STATE to 1.
Thanks,
Durga
> VLV_EDP_PSR_ENABLE);
> }
>
>--
>2.1.0
>
>_______________________________________________
>Intel-gfx mailing list
>Intel-gfx@lists.freedesktop.org
>http://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 8/9] drm/i915: PSR: respect vbt time for link trains when available.
2015-01-12 18:14 ` [PATCH 8/9] drm/i915: PSR: respect vbt time for link trains when available Rodrigo Vivi
@ 2015-01-13 15:00 ` R, Durgadoss
0 siblings, 0 replies; 19+ messages in thread
From: R, Durgadoss @ 2015-01-13 15:00 UTC (permalink / raw)
To: intel-gfx; +Cc: Vivi, Rodrigo
>-----Original Message-----
>From: Intel-gfx [mailto:intel-gfx-bounces@lists.freedesktop.org] On Behalf Of Rodrigo Vivi
>Sent: Monday, January 12, 2015 11:45 PM
>To: intel-gfx@lists.freedesktop.org
>Cc: Vivi, Rodrigo
>Subject: [Intel-gfx] [PATCH 8/9] drm/i915: PSR: respect vbt time for link trains when available.
>
>If link is off we need to give enough time for source to do link train.
>This time is usually set at VBT.
>
>VBT tp time comse in multiple of hundreds.
s/comes/comes
>
>Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
>---
> drivers/gpu/drm/i915/intel_psr.c | 6 +++++-
> 1 file changed, 5 insertions(+), 1 deletion(-)
>
>diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
>index 313347a..d1c2c31 100644
>--- a/drivers/gpu/drm/i915/intel_psr.c
>+++ b/drivers/gpu/drm/i915/intel_psr.c
>@@ -603,6 +603,10 @@ void intel_psr_flush(struct drm_device *dev,
> struct drm_i915_private *dev_priv = dev->dev_private;
> struct drm_crtc *crtc;
> enum pipe pipe;
>+ bool link_on = dev_priv->psr.link_standby;
>+ int tp = 100 * dev_priv->vbt.psr.tp2_tp3_wakeup_time +
>+ 100 * dev_priv->vbt.psr.tp1_wakeup_time;
>+ int delay = tp && !link_on ? tp : 100;
May be we should WARN/DRM_ERR on link_on is false but still tp is 0 ?
With this, for patches 8-9,
Reviewed-by: Durgadoss R <durgadoss.r@intel.com>
Thanks,
Durga
>
> mutex_lock(&dev_priv->psr.lock);
> if (!dev_priv->psr.enabled) {
>@@ -635,7 +639,7 @@ void intel_psr_flush(struct drm_device *dev,
>
> if (!dev_priv->psr.active && !dev_priv->psr.busy_frontbuffer_bits)
> schedule_delayed_work(&dev_priv->psr.work,
>- msecs_to_jiffies(100));
>+ msecs_to_jiffies(delay));
> mutex_unlock(&dev_priv->psr.lock);
> }
>
>--
>2.1.0
>
>_______________________________________________
>Intel-gfx mailing list
>Intel-gfx@lists.freedesktop.org
>http://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 3/9] drm/i915: PSR HSW/BDW: Fix inverted logic at sink main_link_active bit.
2015-01-13 14:24 ` R, Durgadoss
@ 2015-01-13 22:26 ` Daniel Vetter
2015-01-14 0:55 ` Rodrigo Vivi
0 siblings, 1 reply; 19+ messages in thread
From: Daniel Vetter @ 2015-01-13 22:26 UTC (permalink / raw)
To: R, Durgadoss; +Cc: intel-gfx, Vivi, Rodrigo
On Tue, Jan 13, 2015 at 02:24:54PM +0000, R, Durgadoss wrote:
> Hi Rodrigo,
>
> >-----Original Message-----
> >From: Intel-gfx [mailto:intel-gfx-bounces@lists.freedesktop.org] On Behalf Of Rodrigo Vivi
> >Sent: Monday, January 12, 2015 11:45 PM
> >To: intel-gfx@lists.freedesktop.org
> >Cc: Vivi, Rodrigo
> >Subject: [Intel-gfx] [PATCH 3/9] drm/i915: PSR HSW/BDW: Fix inverted logic at sink main_link_active bit.
> >
> >We have only two possible states with so many names and combinations that
> >might be confusing.
> >
> >1 - Main link active / enabled / stand by / on
> >2 - Main link disabled / off / full off
>
> In this case, I think we should use 'link_active' instead of 'link_standby'
> since 'active' is what is used by the eDP spec and most of our PSR
> macros. But, I believe we can have this as a separate patch.
I haven't read the patches in detail, but consistent naming is imo very
important. Also since this seems to be confusing some extension to the psr
kerneldoc overview comment is imo asked for here.
Rodrigo, can you please update the patches or do a follow up? Either is
fine with me.
-Daniel
>
> For patches 1-3,
> Reviewed-by: Durgadoss R <durgadoss.r@intel.com>
>
> Thanks,
> Durga
>
> >
> >Let's start organizing it by fixing a inverted logic when setting the sink bit.
> >
> >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 3dd8886..0af89db 100644
> >--- a/drivers/gpu/drm/i915/intel_psr.c
> >+++ b/drivers/gpu/drm/i915/intel_psr.c
> >@@ -163,10 +163,10 @@ static void hsw_psr_enable_sink(struct intel_dp *intel_dp)
> > /* Enable PSR in sink */
> > if (intel_dp->psr_dpcd[1] & DP_PSR_NO_TRAIN_ON_EXIT || only_standby)
> > drm_dp_dpcd_writeb(&intel_dp->aux, DP_PSR_EN_CFG,
> >- DP_PSR_ENABLE & ~DP_PSR_MAIN_LINK_ACTIVE);
> >+ DP_PSR_ENABLE | DP_PSR_MAIN_LINK_ACTIVE);
> > else
> > drm_dp_dpcd_writeb(&intel_dp->aux, DP_PSR_EN_CFG,
> >- DP_PSR_ENABLE | DP_PSR_MAIN_LINK_ACTIVE);
> >+ DP_PSR_ENABLE & ~DP_PSR_MAIN_LINK_ACTIVE);
> >
> > /* Setup AUX registers */
> > for (i = 0; i < sizeof(aux_msg); i += 4)
> >--
> >2.1.0
> >
> >_______________________________________________
> >Intel-gfx mailing list
> >Intel-gfx@lists.freedesktop.org
> >http://lists.freedesktop.org/mailman/listinfo/intel-gfx
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 3/9] drm/i915: PSR HSW/BDW: Fix inverted logic at sink main_link_active bit.
2015-01-13 22:26 ` Daniel Vetter
@ 2015-01-14 0:55 ` Rodrigo Vivi
0 siblings, 0 replies; 19+ messages in thread
From: Rodrigo Vivi @ 2015-01-14 0:55 UTC (permalink / raw)
To: Daniel Vetter; +Cc: intel-gfx, Vivi, Rodrigo
On Tue, Jan 13, 2015 at 2:26 PM, Daniel Vetter <daniel@ffwll.ch> wrote:
> On Tue, Jan 13, 2015 at 02:24:54PM +0000, R, Durgadoss wrote:
>> Hi Rodrigo,
>>
>> >-----Original Message-----
>> >From: Intel-gfx [mailto:intel-gfx-bounces@lists.freedesktop.org] On Behalf Of Rodrigo Vivi
>> >Sent: Monday, January 12, 2015 11:45 PM
>> >To: intel-gfx@lists.freedesktop.org
>> >Cc: Vivi, Rodrigo
>> >Subject: [Intel-gfx] [PATCH 3/9] drm/i915: PSR HSW/BDW: Fix inverted logic at sink main_link_active bit.
>> >
>> >We have only two possible states with so many names and combinations that
>> >might be confusing.
>> >
>> >1 - Main link active / enabled / stand by / on
>> >2 - Main link disabled / off / full off
>>
>> In this case, I think we should use 'link_active' instead of 'link_standby'
>> since 'active' is what is used by the eDP spec and most of our PSR
>> macros. But, I believe we can have this as a separate patch.
>
> I haven't read the patches in detail, but consistent naming is imo very
> important. Also since this seems to be confusing some extension to the psr
> kerneldoc overview comment is imo asked for here.
I also agree that consistent naming is good. This name caused the
confusion of inverted logic somewhere here.
But I believe active name can be counfused with active/exit state we
have on source side.
Also standby is the name used on the source. Actually we have many
names for same think
* full_link_on at VBT
* link_active on DP
* transmitter state on VLV/CHV
* link_standby on core implementation
I prefer the link_standby.
>
> Rodrigo, can you please update the patches or do a follow up? Either is
> fine with me.
I prefer a follow-up so we can continue discussion to see if I change
my mind on the better name ;)
> -Daniel
Thank you both,
Rodrigo.
>
>>
>> For patches 1-3,
>> Reviewed-by: Durgadoss R <durgadoss.r@intel.com>
>>
>> Thanks,
>> Durga
>>
>> >
>> >Let's start organizing it by fixing a inverted logic when setting the sink bit.
>> >
>> >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 3dd8886..0af89db 100644
>> >--- a/drivers/gpu/drm/i915/intel_psr.c
>> >+++ b/drivers/gpu/drm/i915/intel_psr.c
>> >@@ -163,10 +163,10 @@ static void hsw_psr_enable_sink(struct intel_dp *intel_dp)
>> > /* Enable PSR in sink */
>> > if (intel_dp->psr_dpcd[1] & DP_PSR_NO_TRAIN_ON_EXIT || only_standby)
>> > drm_dp_dpcd_writeb(&intel_dp->aux, DP_PSR_EN_CFG,
>> >- DP_PSR_ENABLE & ~DP_PSR_MAIN_LINK_ACTIVE);
>> >+ DP_PSR_ENABLE | DP_PSR_MAIN_LINK_ACTIVE);
>> > else
>> > drm_dp_dpcd_writeb(&intel_dp->aux, DP_PSR_EN_CFG,
>> >- DP_PSR_ENABLE | DP_PSR_MAIN_LINK_ACTIVE);
>> >+ DP_PSR_ENABLE & ~DP_PSR_MAIN_LINK_ACTIVE);
>> >
>> > /* Setup AUX registers */
>> > for (i = 0; i < sizeof(aux_msg); i += 4)
>> >--
>> >2.1.0
>> >
>> >_______________________________________________
>> >Intel-gfx mailing list
>> >Intel-gfx@lists.freedesktop.org
>> >http://lists.freedesktop.org/mailman/listinfo/intel-gfx
>> _______________________________________________
>> Intel-gfx mailing list
>> Intel-gfx@lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
> --
> Daniel Vetter
> Software Engineer, Intel Corporation
> +41 (0) 79 365 57 48 - http://blog.ffwll.ch
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Rodrigo Vivi
Blog: http://blog.vivi.eng.br
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 7/9] drm/i915: PSR VLV/CHV: let's respect link_standby here as well.
2015-01-13 14:46 ` R, Durgadoss
@ 2015-01-14 22:43 ` Rodrigo Vivi
0 siblings, 0 replies; 19+ messages in thread
From: Rodrigo Vivi @ 2015-01-14 22:43 UTC (permalink / raw)
To: R, Durgadoss; +Cc: intel-gfx, Vivi, Rodrigo
Sure, please ignore this patch for now...
Also this one was a wrong version without a needed parenthesis on
transmitter line, so it was actually disabling PSR on CHV.
On Tue, Jan 13, 2015 at 6:46 AM, R, Durgadoss <durgadoss.r@intel.com> wrote:
>>-----Original Message-----
>>From: Intel-gfx [mailto:intel-gfx-bounces@lists.freedesktop.org] On Behalf Of Rodrigo Vivi
>>Sent: Monday, January 12, 2015 11:45 PM
>>To: intel-gfx@lists.freedesktop.org
>>Cc: Vivi, Rodrigo
>>Subject: [Intel-gfx] [PATCH 7/9] drm/i915: PSR VLV/CHV: let's respect link_standby here as well.
>>
>>Let's respect vbt and panel for link_standby/on x link_disabled
>>
>>Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
>>---
>> drivers/gpu/drm/i915/intel_psr.c | 16 +++++++++++++---
>> 1 file changed, 13 insertions(+), 3 deletions(-)
>>
>>diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
>>index 5ae193e..313347a 100644
>>--- a/drivers/gpu/drm/i915/intel_psr.c
>>+++ b/drivers/gpu/drm/i915/intel_psr.c
>>@@ -132,8 +132,17 @@ static void hsw_psr_setup_vsc(struct intel_dp *intel_dp)
>>
>> static void vlv_psr_enable_sink(struct intel_dp *intel_dp)
>> {
>>- drm_dp_dpcd_writeb(&intel_dp->aux, DP_PSR_EN_CFG,
>>- DP_PSR_ENABLE);
>>+ 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 = dev->dev_private;
>>+
>>+ /* Enable PSR in sink */
>>+ if (dev_priv->psr.link_standby)
>>+ drm_dp_dpcd_writeb(&intel_dp->aux, DP_PSR_EN_CFG,
>>+ DP_PSR_ENABLE | DP_PSR_MAIN_LINK_ACTIVE);
>>+ else
>>+ drm_dp_dpcd_writeb(&intel_dp->aux, DP_PSR_EN_CFG,
>>+ DP_PSR_ENABLE & ~DP_PSR_MAIN_LINK_ACTIVE);
>> }
>>
>> static void hsw_psr_enable_sink(struct intel_dp *intel_dp)
>>@@ -183,11 +192,12 @@ static void vlv_psr_enable_source(struct intel_dp *intel_dp)
>> struct drm_i915_private *dev_priv = dev->dev_private;
>> struct drm_crtc *crtc = dig_port->base.base.crtc;
>> enum pipe pipe = to_intel_crtc(crtc)->pipe;
>>+ bool standby = dev_priv->psr.link_standby;
>>
>> /* Transition from PSR_state 0 to PSR_state 1, i.e. PSR Inactive */
>> I915_WRITE(VLV_PSRCTL(pipe),
>> VLV_EDP_PSR_MODE_SW_TIMER |
>>- VLV_EDP_PSR_SRC_TRANSMITTER_STATE |
>>+ standby ? VLV_EDP_PSR_SRC_TRANSMITTER_STATE : 0 |
>
> Apart from VBT, this also depends on the Panel DPCD 71h.
> If bit 0 of 71h is 0, we may need Link training to exit PSR,
> If main link is off.
>
> So, unless we try it out on various panels and
> are confident about it, I suggest we keep this
> TRANSMITTER_STATE to 1.
>
> Thanks,
> Durga
>
>> VLV_EDP_PSR_ENABLE);
>> }
>>
>>--
>>2.1.0
>>
>>_______________________________________________
>>Intel-gfx mailing list
>>Intel-gfx@lists.freedesktop.org
>>http://lists.freedesktop.org/mailman/listinfo/intel-gfx
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Rodrigo Vivi
Blog: http://blog.vivi.eng.br
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 9/9] drm/i915: PSR: Expose wakeup time.
2015-01-12 18:14 ` [PATCH 9/9] drm/i915: PSR: Expose wakeup time Rodrigo Vivi
2015-01-13 1:32 ` shuang.he
@ 2015-01-15 0:55 ` Daniel Vetter
1 sibling, 0 replies; 19+ messages in thread
From: Daniel Vetter @ 2015-01-15 0:55 UTC (permalink / raw)
To: Rodrigo Vivi; +Cc: intel-gfx
On Mon, Jan 12, 2015 at 10:14:36AM -0800, Rodrigo Vivi wrote:
> This will be useful for automated test to know for how long to wait for PSR
> to comeback before time out.
>
> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> ---
> drivers/gpu/drm/i915/i915_debugfs.c | 2 ++
> drivers/gpu/drm/i915/i915_drv.h | 1 +
> drivers/gpu/drm/i915/intel_psr.c | 5 +++--
> 3 files changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> index 0d11cbe..8823867 100644
> --- a/drivers/gpu/drm/i915/i915_debugfs.c
> +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> @@ -2250,6 +2250,8 @@ static int i915_edp_psr_status(struct seq_file *m, void *data)
>
> seq_printf(m, "Link standby: %s\n",
> yesno((bool)dev_priv->psr.link_standby));
> + seq_printf(m, "Wakeup time: %d ms\n",
> + dev_priv->psr.wakeup_time);
>
> /* CHV PSR has no kind of performance counter */
> if (HAS_PSR(dev) && HAS_DDI(dev)) {
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index b4f01b4..4b1d07d 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -790,6 +790,7 @@ struct i915_psr {
> struct delayed_work work;
> unsigned busy_frontbuffer_bits;
> bool link_standby;
> + int wakeup_time;
> };
>
> enum intel_pch {
> diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
> index d1c2c31..3838921 100644
> --- a/drivers/gpu/drm/i915/intel_psr.c
> +++ b/drivers/gpu/drm/i915/intel_psr.c
> @@ -606,7 +606,8 @@ void intel_psr_flush(struct drm_device *dev,
> bool link_on = dev_priv->psr.link_standby;
> int tp = 100 * dev_priv->vbt.psr.tp2_tp3_wakeup_time +
> 100 * dev_priv->vbt.psr.tp1_wakeup_time;
> - int delay = tp && !link_on ? tp : 100;
> +
> + dev_priv->psr.wakeup_time = tp && !link_on ? tp : 100;
Recomputing this on every flush looks a bit strange. Especially since it
means we have this kind of one-time computations at different places. Imo
that should all be consolidated (probably best in the psr_enable
funcions). I'll wait for a resend for this and patch 8 (and the naming
unconfusion+kerneldoc patch), all others merged.
Thanks, Daniel
>
> mutex_lock(&dev_priv->psr.lock);
> if (!dev_priv->psr.enabled) {
> @@ -639,7 +640,7 @@ void intel_psr_flush(struct drm_device *dev,
>
> if (!dev_priv->psr.active && !dev_priv->psr.busy_frontbuffer_bits)
> schedule_delayed_work(&dev_priv->psr.work,
> - msecs_to_jiffies(delay));
> + msecs_to_jiffies(dev_priv->psr.wakeup_time));
> mutex_unlock(&dev_priv->psr.lock);
> }
>
> --
> 2.1.0
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 19+ messages in thread
end of thread, other threads:[~2015-01-15 0:55 UTC | newest]
Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-01-12 18:14 [PATCH 0/9] PSR stability patches for HSW/BDW and VLV/CHV Rodrigo Vivi
2015-01-12 18:14 ` [PATCH 1/9] drm/i915: VLV/CHV PSR needs to exit PSR on every flush Rodrigo Vivi
2015-01-12 18:14 ` [PATCH 2/9] drm/i915: PSR VLV/CHV: Remove condition checks that only applies to Haswell Rodrigo Vivi
2015-01-12 18:14 ` [PATCH 3/9] drm/i915: PSR HSW/BDW: Fix inverted logic at sink main_link_active bit Rodrigo Vivi
2015-01-13 14:24 ` R, Durgadoss
2015-01-13 22:26 ` Daniel Vetter
2015-01-14 0:55 ` Rodrigo Vivi
2015-01-12 18:14 ` [PATCH 4/9] drm/i915: Add missing vbt check Rodrigo Vivi
2015-01-12 18:14 ` [PATCH 5/9] drm/i915: group link_standby setup and let this info visible everywhere Rodrigo Vivi
2015-01-12 18:14 ` [PATCH 6/9] drm/i915: PSR link standby at debugfs Rodrigo Vivi
2015-01-13 14:26 ` R, Durgadoss
2015-01-12 18:14 ` [PATCH 7/9] drm/i915: PSR VLV/CHV: let's respect link_standby here as well Rodrigo Vivi
2015-01-13 14:46 ` R, Durgadoss
2015-01-14 22:43 ` Rodrigo Vivi
2015-01-12 18:14 ` [PATCH 8/9] drm/i915: PSR: respect vbt time for link trains when available Rodrigo Vivi
2015-01-13 15:00 ` R, Durgadoss
2015-01-12 18:14 ` [PATCH 9/9] drm/i915: PSR: Expose wakeup time Rodrigo Vivi
2015-01-13 1:32 ` shuang.he
2015-01-15 0:55 ` Daniel Vetter
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.