* [PATCH 1/4] drm/i915/psr: Prevent PSR exit when a non-pipe related register is written
@ 2018-04-25 21:23 José Roberto de Souza
2018-04-25 21:23 ` [PATCH 2/4] drm/i915/psr/skl+: Print information about what caused a PSR exit José Roberto de Souza
` (4 more replies)
0 siblings, 5 replies; 10+ messages in thread
From: José Roberto de Souza @ 2018-04-25 21:23 UTC (permalink / raw)
To: intel-gfx; +Cc: Rodrigo Vivi
Any write in any display register was causing HW to exit PSR,
masking it to allow more power savings. Writes to pipe related
registers will still cause HW to exit PSR.
This is already masked for PSR2.
It also do not break the Display WA #0884, writes to CURSURFLIVE
are still causing hardware to exit PSR. This was tested in CNL machine
by triggering a write to CURSURFLIVE when a debugfs was read by user.
Bspec: 7721 and 8042
v4: Checked that it do not breaks WA #0884 and added this information
to the commit message.
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Reviewed-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
---
drivers/gpu/drm/i915/intel_psr.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
index 0d548292dd09..e35a3b94fa69 100644
--- a/drivers/gpu/drm/i915/intel_psr.c
+++ b/drivers/gpu/drm/i915/intel_psr.c
@@ -667,7 +667,8 @@ static void hsw_psr_enable_source(struct intel_dp *intel_dp,
I915_WRITE(EDP_PSR_DEBUG,
EDP_PSR_DEBUG_MASK_MEMUP |
EDP_PSR_DEBUG_MASK_HPD |
- EDP_PSR_DEBUG_MASK_LPSP);
+ EDP_PSR_DEBUG_MASK_LPSP |
+ EDP_PSR_DEBUG_MASK_DISP_REG_WRITE);
}
}
--
2.17.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 2/4] drm/i915/psr/skl+: Print information about what caused a PSR exit
2018-04-25 21:23 [PATCH 1/4] drm/i915/psr: Prevent PSR exit when a non-pipe related register is written José Roberto de Souza
@ 2018-04-25 21:23 ` José Roberto de Souza
2018-04-25 21:40 ` Rodrigo Vivi
2018-04-25 21:23 ` [PATCH 3/4] drm/i915/debugfs: Print sink PSR status José Roberto de Souza
` (3 subsequent siblings)
4 siblings, 1 reply; 10+ messages in thread
From: José Roberto de Souza @ 2018-04-25 21:23 UTC (permalink / raw)
To: intel-gfx; +Cc: Dhinakaran Pandiyan, Rodrigo Vivi
This will be helpful to debug what hardware is actually tracking
and causing PSR to exit.
BSpec: 7721
v4:
- Using _MMIO_TRANS2() in PSR_EVENT
- Cleaning events before printing
Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
drivers/gpu/drm/i915/i915_reg.h | 23 ++++++++++++++++
drivers/gpu/drm/i915/intel_psr.c | 45 ++++++++++++++++++++++++++++++++
2 files changed, 68 insertions(+)
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index 2dad655a710c..391825ae2361 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -4095,6 +4095,29 @@ enum {
#define EDP_PSR2_IDLE_FRAME_MASK 0xf
#define EDP_PSR2_IDLE_FRAME_SHIFT 0
+#define _PSR_EVENT_TRANS_A 0x60848
+#define _PSR_EVENT_TRANS_B 0x61848
+#define _PSR_EVENT_TRANS_C 0x62848
+#define _PSR_EVENT_TRANS_D 0x63848
+#define _PSR_EVENT_TRANS_EDP 0x6F848
+#define PSR_EVENT(trans) _MMIO_TRANS2(trans, _PSR_EVENT_TRANS_A)
+#define PSR_EVENT_PSR2_WD_TIMER_EXPIRE (1 << 17)
+#define PSR_EVENT_PSR2_DISABLED (1 << 16)
+#define PSR_EVENT_SU_DIRTY_FIFO_UNDERRUN (1 << 15)
+#define PSR_EVENT_SU_CRC_FIFO_UNDERRUN (1 << 14)
+#define PSR_EVENT_GRAPHICS_RESET (1 << 12)
+#define PSR_EVENT_PCH_INTERRUPT (1 << 11)
+#define PSR_EVENT_MEMORY_UP (1 << 10)
+#define PSR_EVENT_FRONT_BUFFER_MODIFY (1 << 9)
+#define PSR_EVENT_WD_TIMER_EXPIRE (1 << 8)
+#define PSR_EVENT_PIPE_REGISTERS_UPDATE (1 << 6)
+#define PSR_EVENT_REGISTER_UPDATE (1 << 5)
+#define PSR_EVENT_HDCP_ENABLE (1 << 4)
+#define PSR_EVENT_KVMR_SESSION_ENABLE (1 << 3)
+#define PSR_EVENT_VBI_ENABLE (1 << 2)
+#define PSR_EVENT_LPSP_MODE_EXIT (1 << 1)
+#define PSR_EVENT_PSR_DISABLE (1 << 0)
+
#define EDP_PSR2_STATUS _MMIO(0x6f940)
#define EDP_PSR2_STATUS_STATE_MASK (0xf<<28)
#define EDP_PSR2_STATUS_STATE_SHIFT 28
diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
index e35a3b94fa69..c8d5cdce544f 100644
--- a/drivers/gpu/drm/i915/intel_psr.c
+++ b/drivers/gpu/drm/i915/intel_psr.c
@@ -125,6 +125,43 @@ void intel_psr_irq_control(struct drm_i915_private *dev_priv, bool debug)
I915_WRITE(EDP_PSR_IMR, ~mask);
}
+static void psr_event_print(u32 val, bool psr2_enabled)
+{
+ DRM_DEBUG_KMS("PSR exit events: 0x%x\n", val);
+ if (val & PSR_EVENT_PSR2_WD_TIMER_EXPIRE)
+ DRM_DEBUG_KMS("\tPSR2 watchdog timer expired\n");
+ if ((val & PSR_EVENT_PSR2_DISABLED) && psr2_enabled)
+ DRM_DEBUG_KMS("\tPSR2 disabled\n");
+ if (val & PSR_EVENT_SU_DIRTY_FIFO_UNDERRUN)
+ DRM_DEBUG_KMS("\tSU dirty FIFO underrun\n");
+ if (val & PSR_EVENT_SU_CRC_FIFO_UNDERRUN)
+ DRM_DEBUG_KMS("\tSU CRC FIFO underrun\n");
+ if (val & PSR_EVENT_GRAPHICS_RESET)
+ DRM_DEBUG_KMS("\tGraphics reset\n");
+ if (val & PSR_EVENT_PCH_INTERRUPT)
+ DRM_DEBUG_KMS("\tPCH interrupt\n");
+ if (val & PSR_EVENT_MEMORY_UP)
+ DRM_DEBUG_KMS("\tMemory up\n");
+ if (val & PSR_EVENT_FRONT_BUFFER_MODIFY)
+ DRM_DEBUG_KMS("\tFront buffer modification\n");
+ if (val & PSR_EVENT_WD_TIMER_EXPIRE)
+ DRM_DEBUG_KMS("\tPSR watchdog timer expired\n");
+ if (val & PSR_EVENT_PIPE_REGISTERS_UPDATE)
+ DRM_DEBUG_KMS("\tPIPE registers updated\n");
+ if (val & PSR_EVENT_REGISTER_UPDATE)
+ DRM_DEBUG_KMS("\tRegister updated\n");
+ if (val & PSR_EVENT_HDCP_ENABLE)
+ DRM_DEBUG_KMS("\tHDCP enabled\n");
+ if (val & PSR_EVENT_KVMR_SESSION_ENABLE)
+ DRM_DEBUG_KMS("\tKVMR session enabled\n");
+ if (val & PSR_EVENT_VBI_ENABLE)
+ DRM_DEBUG_KMS("\tVBI enabled\n");
+ if (val & PSR_EVENT_LPSP_MODE_EXIT)
+ DRM_DEBUG_KMS("\tLPSP mode exited\n");
+ if ((val & PSR_EVENT_PSR_DISABLE) && !psr2_enabled)
+ DRM_DEBUG_KMS("\tPSR disabled\n");
+}
+
void intel_psr_irq_handler(struct drm_i915_private *dev_priv, u32 psr_iir)
{
u32 transcoders = BIT(TRANSCODER_EDP);
@@ -152,6 +189,14 @@ void intel_psr_irq_handler(struct drm_i915_private *dev_priv, u32 psr_iir)
dev_priv->psr.last_exit = time_ns;
DRM_DEBUG_KMS("[transcoder %s] PSR exit completed\n",
transcoder_name(cpu_transcoder));
+
+ if (INTEL_GEN(dev_priv) >= 9) {
+ u32 val = I915_READ(PSR_EVENT(cpu_transcoder));
+ bool psr2_enabled = dev_priv->psr.psr2_enabled;
+
+ I915_WRITE(PSR_EVENT(cpu_transcoder), val);
+ psr_event_print(val, psr2_enabled);
+ }
}
}
}
--
2.17.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 3/4] drm/i915/debugfs: Print sink PSR status
2018-04-25 21:23 [PATCH 1/4] drm/i915/psr: Prevent PSR exit when a non-pipe related register is written José Roberto de Souza
2018-04-25 21:23 ` [PATCH 2/4] drm/i915/psr/skl+: Print information about what caused a PSR exit José Roberto de Souza
@ 2018-04-25 21:23 ` José Roberto de Souza
2018-04-25 21:23 ` [PATCH 4/4] drm/i915/psr/cnl: Set y-coordinate as valid in SDP José Roberto de Souza
` (2 subsequent siblings)
4 siblings, 0 replies; 10+ messages in thread
From: José Roberto de Souza @ 2018-04-25 21:23 UTC (permalink / raw)
To: intel-gfx; +Cc: Rodrigo Vivi
IGT tests could be improved with sink status, knowing for sure that
hardware have activate or exit PSR.
v3:
Reading i915_edp_psr_status was causing PSR to exit but now with
'drm/i915/psr: Prevent PSR exit when a non-pipe related register is
written' it is fixed.
Reviewed-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
---
drivers/gpu/drm/i915/i915_debugfs.c | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index 1c88805d3354..cb1a804bf72e 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -2603,6 +2603,26 @@ static const char *psr2_live_status(u32 val)
return "unknown";
}
+static const char *psr_sink_status(u8 val)
+{
+ static const char * const sink_status[] = {
+ "inactive",
+ "transition to active, capture and display",
+ "active, display from RFB",
+ "active, capture and display on sink device timings",
+ "transition to inactive, capture and display, timing re-sync",
+ "reserved",
+ "reserved",
+ "sink internal error"
+ };
+
+ val &= DP_PSR_SINK_STATE_MASK;
+ if (val < ARRAY_SIZE(sink_status))
+ return sink_status[val];
+
+ return "unknown";
+}
+
static int i915_edp_psr_status(struct seq_file *m, void *data)
{
struct drm_i915_private *dev_priv = node_to_i915(m->private);
@@ -2684,6 +2704,15 @@ static int i915_edp_psr_status(struct seq_file *m, void *data)
seq_printf(m, "EDP_PSR2_STATUS: %x [%s]\n",
psr2, psr2_live_status(psr2));
}
+
+ if (dev_priv->psr.enabled) {
+ struct drm_dp_aux *aux = &dev_priv->psr.enabled->aux;
+ u8 val;
+
+ if (drm_dp_dpcd_readb(aux, DP_PSR_STATUS, &val) == 1)
+ seq_printf(m, "Sink PSR status: 0x%x [%s]\n", val,
+ psr_sink_status(val));
+ }
mutex_unlock(&dev_priv->psr.lock);
if (READ_ONCE(dev_priv->psr.debug)) {
--
2.17.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 4/4] drm/i915/psr/cnl: Set y-coordinate as valid in SDP
2018-04-25 21:23 [PATCH 1/4] drm/i915/psr: Prevent PSR exit when a non-pipe related register is written José Roberto de Souza
2018-04-25 21:23 ` [PATCH 2/4] drm/i915/psr/skl+: Print information about what caused a PSR exit José Roberto de Souza
2018-04-25 21:23 ` [PATCH 3/4] drm/i915/debugfs: Print sink PSR status José Roberto de Souza
@ 2018-04-25 21:23 ` José Roberto de Souza
2018-04-25 22:06 ` ✓ Fi.CI.BAT: success for series starting with [1/4] drm/i915/psr: Prevent PSR exit when a non-pipe related register is written Patchwork
2018-04-26 2:42 ` ✓ Fi.CI.IGT: " Patchwork
4 siblings, 0 replies; 10+ messages in thread
From: José Roberto de Souza @ 2018-04-25 21:23 UTC (permalink / raw)
To: intel-gfx; +Cc: Rodrigo Vivi
This was my bad, spec says that the name of this bit is
'Y-coordinate valid' but the values for it is:
0: Include Y-coordinate valid eDP1.4a
1: Do not include Y-coordinate valid eDP 1.4
So not setting it.
BSpec: 7713
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Reviewed-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
---
drivers/gpu/drm/i915/intel_psr.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
index c8d5cdce544f..6233a322aac5 100644
--- a/drivers/gpu/drm/i915/intel_psr.c
+++ b/drivers/gpu/drm/i915/intel_psr.c
@@ -508,9 +508,8 @@ static void hsw_activate_psr2(struct intel_dp *intel_dp)
* mesh at all with our frontbuffer tracking. And the hw alone isn't
* good enough. */
val |= EDP_PSR2_ENABLE | EDP_SU_TRACK_ENABLE;
- if (INTEL_GEN(dev_priv) >= 10 || IS_GEMINILAKE(dev_priv)) {
- val |= EDP_Y_COORDINATE_VALID | EDP_Y_COORDINATE_ENABLE;
- }
+ if (INTEL_GEN(dev_priv) >= 10 || IS_GEMINILAKE(dev_priv))
+ val |= EDP_Y_COORDINATE_ENABLE;
val |= EDP_PSR2_FRAME_BEFORE_SU(dev_priv->psr.sink_sync_latency + 1);
--
2.17.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 2/4] drm/i915/psr/skl+: Print information about what caused a PSR exit
2018-04-25 21:23 ` [PATCH 2/4] drm/i915/psr/skl+: Print information about what caused a PSR exit José Roberto de Souza
@ 2018-04-25 21:40 ` Rodrigo Vivi
2018-04-25 21:47 ` Souza, Jose
0 siblings, 1 reply; 10+ messages in thread
From: Rodrigo Vivi @ 2018-04-25 21:40 UTC (permalink / raw)
To: José Roberto de Souza; +Cc: intel-gfx, Dhinakaran Pandiyan
On Wed, Apr 25, 2018 at 02:23:32PM -0700, José Roberto de Souza wrote:
> This will be helpful to debug what hardware is actually tracking
> and causing PSR to exit.
>
> BSpec: 7721
>
> v4:
> - Using _MMIO_TRANS2() in PSR_EVENT
> - Cleaning events before printing
>
> Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
> Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> ---
> drivers/gpu/drm/i915/i915_reg.h | 23 ++++++++++++++++
> drivers/gpu/drm/i915/intel_psr.c | 45 ++++++++++++++++++++++++++++++++
> 2 files changed, 68 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
> index 2dad655a710c..391825ae2361 100644
> --- a/drivers/gpu/drm/i915/i915_reg.h
> +++ b/drivers/gpu/drm/i915/i915_reg.h
> @@ -4095,6 +4095,29 @@ enum {
> #define EDP_PSR2_IDLE_FRAME_MASK 0xf
> #define EDP_PSR2_IDLE_FRAME_SHIFT 0
>
> +#define _PSR_EVENT_TRANS_A 0x60848
> +#define _PSR_EVENT_TRANS_B 0x61848
> +#define _PSR_EVENT_TRANS_C 0x62848
> +#define _PSR_EVENT_TRANS_D 0x63848
> +#define _PSR_EVENT_TRANS_EDP 0x6F848
> +#define PSR_EVENT(trans) _MMIO_TRANS2(trans, _PSR_EVENT_TRANS_A)
> +#define PSR_EVENT_PSR2_WD_TIMER_EXPIRE (1 << 17)
> +#define PSR_EVENT_PSR2_DISABLED (1 << 16)
> +#define PSR_EVENT_SU_DIRTY_FIFO_UNDERRUN (1 << 15)
> +#define PSR_EVENT_SU_CRC_FIFO_UNDERRUN (1 << 14)
> +#define PSR_EVENT_GRAPHICS_RESET (1 << 12)
> +#define PSR_EVENT_PCH_INTERRUPT (1 << 11)
> +#define PSR_EVENT_MEMORY_UP (1 << 10)
> +#define PSR_EVENT_FRONT_BUFFER_MODIFY (1 << 9)
> +#define PSR_EVENT_WD_TIMER_EXPIRE (1 << 8)
> +#define PSR_EVENT_PIPE_REGISTERS_UPDATE (1 << 6)
> +#define PSR_EVENT_REGISTER_UPDATE (1 << 5)
> +#define PSR_EVENT_HDCP_ENABLE (1 << 4)
> +#define PSR_EVENT_KVMR_SESSION_ENABLE (1 << 3)
> +#define PSR_EVENT_VBI_ENABLE (1 << 2)
> +#define PSR_EVENT_LPSP_MODE_EXIT (1 << 1)
> +#define PSR_EVENT_PSR_DISABLE (1 << 0)
> +
> #define EDP_PSR2_STATUS _MMIO(0x6f940)
> #define EDP_PSR2_STATUS_STATE_MASK (0xf<<28)
> #define EDP_PSR2_STATUS_STATE_SHIFT 28
> diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
> index e35a3b94fa69..c8d5cdce544f 100644
> --- a/drivers/gpu/drm/i915/intel_psr.c
> +++ b/drivers/gpu/drm/i915/intel_psr.c
> @@ -125,6 +125,43 @@ void intel_psr_irq_control(struct drm_i915_private *dev_priv, bool debug)
> I915_WRITE(EDP_PSR_IMR, ~mask);
> }
>
> +static void psr_event_print(u32 val, bool psr2_enabled)
> +{
> + DRM_DEBUG_KMS("PSR exit events: 0x%x\n", val);
> + if (val & PSR_EVENT_PSR2_WD_TIMER_EXPIRE)
> + DRM_DEBUG_KMS("\tPSR2 watchdog timer expired\n");
> + if ((val & PSR_EVENT_PSR2_DISABLED) && psr2_enabled)
I'm not sure if we should add this extra psr2_enable check here.
Probably better to just print the bit reference and move one.
otherwise we might have the risk of having a message
"PSR exit events:"
followed by nothing below it
> + DRM_DEBUG_KMS("\tPSR2 disabled\n");
> + if (val & PSR_EVENT_SU_DIRTY_FIFO_UNDERRUN)
> + DRM_DEBUG_KMS("\tSU dirty FIFO underrun\n");
> + if (val & PSR_EVENT_SU_CRC_FIFO_UNDERRUN)
> + DRM_DEBUG_KMS("\tSU CRC FIFO underrun\n");
> + if (val & PSR_EVENT_GRAPHICS_RESET)
> + DRM_DEBUG_KMS("\tGraphics reset\n");
> + if (val & PSR_EVENT_PCH_INTERRUPT)
> + DRM_DEBUG_KMS("\tPCH interrupt\n");
> + if (val & PSR_EVENT_MEMORY_UP)
> + DRM_DEBUG_KMS("\tMemory up\n");
> + if (val & PSR_EVENT_FRONT_BUFFER_MODIFY)
> + DRM_DEBUG_KMS("\tFront buffer modification\n");
> + if (val & PSR_EVENT_WD_TIMER_EXPIRE)
> + DRM_DEBUG_KMS("\tPSR watchdog timer expired\n");
> + if (val & PSR_EVENT_PIPE_REGISTERS_UPDATE)
> + DRM_DEBUG_KMS("\tPIPE registers updated\n");
> + if (val & PSR_EVENT_REGISTER_UPDATE)
> + DRM_DEBUG_KMS("\tRegister updated\n");
> + if (val & PSR_EVENT_HDCP_ENABLE)
> + DRM_DEBUG_KMS("\tHDCP enabled\n");
> + if (val & PSR_EVENT_KVMR_SESSION_ENABLE)
> + DRM_DEBUG_KMS("\tKVMR session enabled\n");
> + if (val & PSR_EVENT_VBI_ENABLE)
> + DRM_DEBUG_KMS("\tVBI enabled\n");
> + if (val & PSR_EVENT_LPSP_MODE_EXIT)
> + DRM_DEBUG_KMS("\tLPSP mode exited\n");
> + if ((val & PSR_EVENT_PSR_DISABLE) && !psr2_enabled)
> + DRM_DEBUG_KMS("\tPSR disabled\n");
> +}
> +
> void intel_psr_irq_handler(struct drm_i915_private *dev_priv, u32 psr_iir)
> {
> u32 transcoders = BIT(TRANSCODER_EDP);
> @@ -152,6 +189,14 @@ void intel_psr_irq_handler(struct drm_i915_private *dev_priv, u32 psr_iir)
> dev_priv->psr.last_exit = time_ns;
> DRM_DEBUG_KMS("[transcoder %s] PSR exit completed\n",
> transcoder_name(cpu_transcoder));
> +
> + if (INTEL_GEN(dev_priv) >= 9) {
> + u32 val = I915_READ(PSR_EVENT(cpu_transcoder));
> + bool psr2_enabled = dev_priv->psr.psr2_enabled;
> +
> + I915_WRITE(PSR_EVENT(cpu_transcoder), val);
writing the value back really clears it?
or should we clear by writting 0 to it?
> + psr_event_print(val, psr2_enabled);
> + }
> }
> }
> }
> --
> 2.17.0
>
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/4] drm/i915/psr/skl+: Print information about what caused a PSR exit
2018-04-25 21:40 ` Rodrigo Vivi
@ 2018-04-25 21:47 ` Souza, Jose
2018-04-25 21:53 ` Rodrigo Vivi
0 siblings, 1 reply; 10+ messages in thread
From: Souza, Jose @ 2018-04-25 21:47 UTC (permalink / raw)
To: Vivi, Rodrigo; +Cc: intel-gfx@lists.freedesktop.org, Pandiyan, Dhinakaran
On Wed, 2018-04-25 at 14:40 -0700, Rodrigo Vivi wrote:
> On Wed, Apr 25, 2018 at 02:23:32PM -0700, José Roberto de Souza
> wrote:
> > This will be helpful to debug what hardware is actually tracking
> > and causing PSR to exit.
> >
> > BSpec: 7721
> >
> > v4:
> > - Using _MMIO_TRANS2() in PSR_EVENT
> > - Cleaning events before printing
> >
> > Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
> > Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> > Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> > ---
> > drivers/gpu/drm/i915/i915_reg.h | 23 ++++++++++++++++
> > drivers/gpu/drm/i915/intel_psr.c | 45
> > ++++++++++++++++++++++++++++++++
> > 2 files changed, 68 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/i915/i915_reg.h
> > b/drivers/gpu/drm/i915/i915_reg.h
> > index 2dad655a710c..391825ae2361 100644
> > --- a/drivers/gpu/drm/i915/i915_reg.h
> > +++ b/drivers/gpu/drm/i915/i915_reg.h
> > @@ -4095,6 +4095,29 @@ enum {
> > #define EDP_PSR2_IDLE_FRAME_MASK 0xf
> > #define EDP_PSR2_IDLE_FRAME_SHIFT 0
> >
> > +#define _PSR_EVENT_TRANS_A 0x60848
> > +#define _PSR_EVENT_TRANS_B 0x61848
> > +#define _PSR_EVENT_TRANS_C 0x62848
> > +#define _PSR_EVENT_TRANS_D 0x63848
> > +#define _PSR_EVENT_TRANS_EDP 0x6F848
> > +#define PSR_EVENT(trans) _MMIO_TRANS2(trans
> > , _PSR_EVENT_TRANS_A)
> > +#define PSR_EVENT_PSR2_WD_TIMER_EXPIRE (1 << 17)
> > +#define PSR_EVENT_PSR2_DISABLED (1 << 16)
> > +#define PSR_EVENT_SU_DIRTY_FIFO_UNDERRUN (1 << 15)
> > +#define PSR_EVENT_SU_CRC_FIFO_UNDERRUN (1 << 14)
> > +#define PSR_EVENT_GRAPHICS_RESET (1 << 12)
> > +#define PSR_EVENT_PCH_INTERRUPT (1 << 11)
> > +#define PSR_EVENT_MEMORY_UP (1 << 10)
> > +#define PSR_EVENT_FRONT_BUFFER_MODIFY (1 << 9)
> > +#define PSR_EVENT_WD_TIMER_EXPIRE (1 << 8)
> > +#define PSR_EVENT_PIPE_REGISTERS_UPDATE (1 << 6)
> > +#define PSR_EVENT_REGISTER_UPDATE (1 << 5)
> > +#define PSR_EVENT_HDCP_ENABLE (1 << 4)
> > +#define PSR_EVENT_KVMR_SESSION_ENABLE (1 << 3)
> > +#define PSR_EVENT_VBI_ENABLE (1 << 2)
> > +#define PSR_EVENT_LPSP_MODE_EXIT (1 << 1)
> > +#define PSR_EVENT_PSR_DISABLE (1 << 0)
> > +
> > #define EDP_PSR2_STATUS _MMIO(0x6f940)
> > #define EDP_PSR2_STATUS_STATE_MASK (0xf<<28)
> > #define EDP_PSR2_STATUS_STATE_SHIFT 28
> > diff --git a/drivers/gpu/drm/i915/intel_psr.c
> > b/drivers/gpu/drm/i915/intel_psr.c
> > index e35a3b94fa69..c8d5cdce544f 100644
> > --- a/drivers/gpu/drm/i915/intel_psr.c
> > +++ b/drivers/gpu/drm/i915/intel_psr.c
> > @@ -125,6 +125,43 @@ void intel_psr_irq_control(struct
> > drm_i915_private *dev_priv, bool debug)
> > I915_WRITE(EDP_PSR_IMR, ~mask);
> > }
> >
> > +static void psr_event_print(u32 val, bool psr2_enabled)
> > +{
> > + DRM_DEBUG_KMS("PSR exit events: 0x%x\n", val);
> > + if (val & PSR_EVENT_PSR2_WD_TIMER_EXPIRE)
> > + DRM_DEBUG_KMS("\tPSR2 watchdog timer expired\n");
> > + if ((val & PSR_EVENT_PSR2_DISABLED) && psr2_enabled)
>
> I'm not sure if we should add this extra psr2_enable check here.
> Probably better to just print the bit reference and move one.
>
> otherwise we might have the risk of having a message
> "PSR exit events:"
> followed by nothing below it
I'm okay with this too but I think is not necessary have 'PSR2
disabled' printed everytime when PSR is enabled.
>
> > + DRM_DEBUG_KMS("\tPSR2 disabled\n");
> > + if (val & PSR_EVENT_SU_DIRTY_FIFO_UNDERRUN)
> > + DRM_DEBUG_KMS("\tSU dirty FIFO underrun\n");
> > + if (val & PSR_EVENT_SU_CRC_FIFO_UNDERRUN)
> > + DRM_DEBUG_KMS("\tSU CRC FIFO underrun\n");
> > + if (val & PSR_EVENT_GRAPHICS_RESET)
> > + DRM_DEBUG_KMS("\tGraphics reset\n");
> > + if (val & PSR_EVENT_PCH_INTERRUPT)
> > + DRM_DEBUG_KMS("\tPCH interrupt\n");
> > + if (val & PSR_EVENT_MEMORY_UP)
> > + DRM_DEBUG_KMS("\tMemory up\n");
> > + if (val & PSR_EVENT_FRONT_BUFFER_MODIFY)
> > + DRM_DEBUG_KMS("\tFront buffer modification\n");
> > + if (val & PSR_EVENT_WD_TIMER_EXPIRE)
> > + DRM_DEBUG_KMS("\tPSR watchdog timer expired\n");
> > + if (val & PSR_EVENT_PIPE_REGISTERS_UPDATE)
> > + DRM_DEBUG_KMS("\tPIPE registers updated\n");
> > + if (val & PSR_EVENT_REGISTER_UPDATE)
> > + DRM_DEBUG_KMS("\tRegister updated\n");
> > + if (val & PSR_EVENT_HDCP_ENABLE)
> > + DRM_DEBUG_KMS("\tHDCP enabled\n");
> > + if (val & PSR_EVENT_KVMR_SESSION_ENABLE)
> > + DRM_DEBUG_KMS("\tKVMR session enabled\n");
> > + if (val & PSR_EVENT_VBI_ENABLE)
> > + DRM_DEBUG_KMS("\tVBI enabled\n");
> > + if (val & PSR_EVENT_LPSP_MODE_EXIT)
> > + DRM_DEBUG_KMS("\tLPSP mode exited\n");
> > + if ((val & PSR_EVENT_PSR_DISABLE) && !psr2_enabled)
> > + DRM_DEBUG_KMS("\tPSR disabled\n");
> > +}
> > +
> > void intel_psr_irq_handler(struct drm_i915_private *dev_priv, u32
> > psr_iir)
> > {
> > u32 transcoders = BIT(TRANSCODER_EDP);
> > @@ -152,6 +189,14 @@ void intel_psr_irq_handler(struct
> > drm_i915_private *dev_priv, u32 psr_iir)
> > dev_priv->psr.last_exit = time_ns;
> > DRM_DEBUG_KMS("[transcoder %s] PSR exit
> > completed\n",
> > transcoder_name(cpu_transcod
> > er));
> > +
> > + if (INTEL_GEN(dev_priv) >= 9) {
> > + u32 val =
> > I915_READ(PSR_EVENT(cpu_transcoder));
> > + bool psr2_enabled = dev_priv-
> > >psr.psr2_enabled;
> > +
> > + I915_WRITE(PSR_EVENT(cpu_transcode
> > r), val);
>
> writing the value back really clears it?
> or should we clear by writting 0 to it?
Yes, it is cleared by writing 1 to the bit.
>
> > + psr_event_print(val,
> > psr2_enabled);
> > + }
> > }
> > }
> > }
> > --
> > 2.17.0
> >
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/4] drm/i915/psr/skl+: Print information about what caused a PSR exit
2018-04-25 21:47 ` Souza, Jose
@ 2018-04-25 21:53 ` Rodrigo Vivi
2018-04-26 22:37 ` Rodrigo Vivi
0 siblings, 1 reply; 10+ messages in thread
From: Rodrigo Vivi @ 2018-04-25 21:53 UTC (permalink / raw)
To: Souza, Jose; +Cc: intel-gfx@lists.freedesktop.org, Pandiyan, Dhinakaran
On Wed, Apr 25, 2018 at 02:47:35PM -0700, Souza, Jose wrote:
> On Wed, 2018-04-25 at 14:40 -0700, Rodrigo Vivi wrote:
> > On Wed, Apr 25, 2018 at 02:23:32PM -0700, José Roberto de Souza
> > wrote:
> > > This will be helpful to debug what hardware is actually tracking
> > > and causing PSR to exit.
> > >
> > > BSpec: 7721
> > >
> > > v4:
> > > - Using _MMIO_TRANS2() in PSR_EVENT
> > > - Cleaning events before printing
> > >
> > > Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
> > > Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> > > Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> > > ---
> > > drivers/gpu/drm/i915/i915_reg.h | 23 ++++++++++++++++
> > > drivers/gpu/drm/i915/intel_psr.c | 45
> > > ++++++++++++++++++++++++++++++++
> > > 2 files changed, 68 insertions(+)
> > >
> > > diff --git a/drivers/gpu/drm/i915/i915_reg.h
> > > b/drivers/gpu/drm/i915/i915_reg.h
> > > index 2dad655a710c..391825ae2361 100644
> > > --- a/drivers/gpu/drm/i915/i915_reg.h
> > > +++ b/drivers/gpu/drm/i915/i915_reg.h
> > > @@ -4095,6 +4095,29 @@ enum {
> > > #define EDP_PSR2_IDLE_FRAME_MASK 0xf
> > > #define EDP_PSR2_IDLE_FRAME_SHIFT 0
> > >
> > > +#define _PSR_EVENT_TRANS_A 0x60848
> > > +#define _PSR_EVENT_TRANS_B 0x61848
> > > +#define _PSR_EVENT_TRANS_C 0x62848
> > > +#define _PSR_EVENT_TRANS_D 0x63848
> > > +#define _PSR_EVENT_TRANS_EDP 0x6F848
> > > +#define PSR_EVENT(trans) _MMIO_TRANS2(trans
> > > , _PSR_EVENT_TRANS_A)
> > > +#define PSR_EVENT_PSR2_WD_TIMER_EXPIRE (1 << 17)
> > > +#define PSR_EVENT_PSR2_DISABLED (1 << 16)
> > > +#define PSR_EVENT_SU_DIRTY_FIFO_UNDERRUN (1 << 15)
> > > +#define PSR_EVENT_SU_CRC_FIFO_UNDERRUN (1 << 14)
> > > +#define PSR_EVENT_GRAPHICS_RESET (1 << 12)
> > > +#define PSR_EVENT_PCH_INTERRUPT (1 << 11)
> > > +#define PSR_EVENT_MEMORY_UP (1 << 10)
> > > +#define PSR_EVENT_FRONT_BUFFER_MODIFY (1 << 9)
> > > +#define PSR_EVENT_WD_TIMER_EXPIRE (1 << 8)
> > > +#define PSR_EVENT_PIPE_REGISTERS_UPDATE (1 << 6)
> > > +#define PSR_EVENT_REGISTER_UPDATE (1 << 5)
> > > +#define PSR_EVENT_HDCP_ENABLE (1 << 4)
> > > +#define PSR_EVENT_KVMR_SESSION_ENABLE (1 << 3)
> > > +#define PSR_EVENT_VBI_ENABLE (1 << 2)
> > > +#define PSR_EVENT_LPSP_MODE_EXIT (1 << 1)
> > > +#define PSR_EVENT_PSR_DISABLE (1 << 0)
> > > +
> > > #define EDP_PSR2_STATUS _MMIO(0x6f940)
> > > #define EDP_PSR2_STATUS_STATE_MASK (0xf<<28)
> > > #define EDP_PSR2_STATUS_STATE_SHIFT 28
> > > diff --git a/drivers/gpu/drm/i915/intel_psr.c
> > > b/drivers/gpu/drm/i915/intel_psr.c
> > > index e35a3b94fa69..c8d5cdce544f 100644
> > > --- a/drivers/gpu/drm/i915/intel_psr.c
> > > +++ b/drivers/gpu/drm/i915/intel_psr.c
> > > @@ -125,6 +125,43 @@ void intel_psr_irq_control(struct
> > > drm_i915_private *dev_priv, bool debug)
> > > I915_WRITE(EDP_PSR_IMR, ~mask);
> > > }
> > >
> > > +static void psr_event_print(u32 val, bool psr2_enabled)
> > > +{
> > > + DRM_DEBUG_KMS("PSR exit events: 0x%x\n", val);
> > > + if (val & PSR_EVENT_PSR2_WD_TIMER_EXPIRE)
> > > + DRM_DEBUG_KMS("\tPSR2 watchdog timer expired\n");
> > > + if ((val & PSR_EVENT_PSR2_DISABLED) && psr2_enabled)
> >
> > I'm not sure if we should add this extra psr2_enable check here.
> > Probably better to just print the bit reference and move one.
> >
> > otherwise we might have the risk of having a message
> > "PSR exit events:"
> > followed by nothing below it
>
> I'm okay with this too but I think is not necessary have 'PSR2
> disabled' printed everytime when PSR is enabled.
oh! I see your point now...
Makes sense to minimize this noise, and let's hope we
don't face the empty case.
>
> >
> > > + DRM_DEBUG_KMS("\tPSR2 disabled\n");
> > > + if (val & PSR_EVENT_SU_DIRTY_FIFO_UNDERRUN)
> > > + DRM_DEBUG_KMS("\tSU dirty FIFO underrun\n");
> > > + if (val & PSR_EVENT_SU_CRC_FIFO_UNDERRUN)
> > > + DRM_DEBUG_KMS("\tSU CRC FIFO underrun\n");
> > > + if (val & PSR_EVENT_GRAPHICS_RESET)
> > > + DRM_DEBUG_KMS("\tGraphics reset\n");
> > > + if (val & PSR_EVENT_PCH_INTERRUPT)
> > > + DRM_DEBUG_KMS("\tPCH interrupt\n");
> > > + if (val & PSR_EVENT_MEMORY_UP)
> > > + DRM_DEBUG_KMS("\tMemory up\n");
> > > + if (val & PSR_EVENT_FRONT_BUFFER_MODIFY)
> > > + DRM_DEBUG_KMS("\tFront buffer modification\n");
> > > + if (val & PSR_EVENT_WD_TIMER_EXPIRE)
> > > + DRM_DEBUG_KMS("\tPSR watchdog timer expired\n");
> > > + if (val & PSR_EVENT_PIPE_REGISTERS_UPDATE)
> > > + DRM_DEBUG_KMS("\tPIPE registers updated\n");
> > > + if (val & PSR_EVENT_REGISTER_UPDATE)
> > > + DRM_DEBUG_KMS("\tRegister updated\n");
> > > + if (val & PSR_EVENT_HDCP_ENABLE)
> > > + DRM_DEBUG_KMS("\tHDCP enabled\n");
> > > + if (val & PSR_EVENT_KVMR_SESSION_ENABLE)
> > > + DRM_DEBUG_KMS("\tKVMR session enabled\n");
> > > + if (val & PSR_EVENT_VBI_ENABLE)
> > > + DRM_DEBUG_KMS("\tVBI enabled\n");
> > > + if (val & PSR_EVENT_LPSP_MODE_EXIT)
> > > + DRM_DEBUG_KMS("\tLPSP mode exited\n");
> > > + if ((val & PSR_EVENT_PSR_DISABLE) && !psr2_enabled)
> > > + DRM_DEBUG_KMS("\tPSR disabled\n");
> > > +}
> > > +
> > > void intel_psr_irq_handler(struct drm_i915_private *dev_priv, u32
> > > psr_iir)
> > > {
> > > u32 transcoders = BIT(TRANSCODER_EDP);
> > > @@ -152,6 +189,14 @@ void intel_psr_irq_handler(struct
> > > drm_i915_private *dev_priv, u32 psr_iir)
> > > dev_priv->psr.last_exit = time_ns;
> > > DRM_DEBUG_KMS("[transcoder %s] PSR exit
> > > completed\n",
> > > transcoder_name(cpu_transcod
> > > er));
> > > +
> > > + if (INTEL_GEN(dev_priv) >= 9) {
> > > + u32 val =
> > > I915_READ(PSR_EVENT(cpu_transcoder));
> > > + bool psr2_enabled = dev_priv-
> > > >psr.psr2_enabled;
> > > +
> > > + I915_WRITE(PSR_EVENT(cpu_transcode
> > > r), val);
> >
> > writing the value back really clears it?
> > or should we clear by writting 0 to it?
>
> Yes, it is cleared by writing 1 to the bit.
cool, thanks for the confirmation
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
(as soon as CI give okay I will push them)
>
> >
> > > + psr_event_print(val,
> > > psr2_enabled);
> > > + }
> > > }
> > > }
> > > }
> > > --
> > > 2.17.0
> > >
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 10+ messages in thread
* ✓ Fi.CI.BAT: success for series starting with [1/4] drm/i915/psr: Prevent PSR exit when a non-pipe related register is written
2018-04-25 21:23 [PATCH 1/4] drm/i915/psr: Prevent PSR exit when a non-pipe related register is written José Roberto de Souza
` (2 preceding siblings ...)
2018-04-25 21:23 ` [PATCH 4/4] drm/i915/psr/cnl: Set y-coordinate as valid in SDP José Roberto de Souza
@ 2018-04-25 22:06 ` Patchwork
2018-04-26 2:42 ` ✓ Fi.CI.IGT: " Patchwork
4 siblings, 0 replies; 10+ messages in thread
From: Patchwork @ 2018-04-25 22:06 UTC (permalink / raw)
To: Souza, Jose; +Cc: intel-gfx
== Series Details ==
Series: series starting with [1/4] drm/i915/psr: Prevent PSR exit when a non-pipe related register is written
URL : https://patchwork.freedesktop.org/series/42304/
State : success
== Summary ==
= CI Bug Log - changes from CI_DRM_4099 -> Patchwork_8802 =
== Summary - SUCCESS ==
No regressions found.
External URL: https://patchwork.freedesktop.org/api/1.0/series/42304/revisions/1/mbox/
== Known issues ==
Here are the changes found in Patchwork_8802 that come from known issues:
=== IGT changes ===
==== Possible fixes ====
igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b:
fi-snb-2520m: INCOMPLETE (fdo#103713) -> PASS
fdo#103713 https://bugs.freedesktop.org/show_bug.cgi?id=103713
== Participating hosts (38 -> 35) ==
Missing (3): fi-ilk-m540 fi-skl-6700hq fi-pnv-d510
== Build changes ==
* Linux: CI_DRM_4099 -> Patchwork_8802
CI_DRM_4099: 92a39635c2eca4dfe1c8c1673e0c606a720746e5 @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_4449: 0350f0e7f6a0e07281445fc3082aa70419f4aac7 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
Patchwork_8802: cd94e9f8e4937f47d54a2eb6e821020f388b5cdf @ git://anongit.freedesktop.org/gfx-ci/linux
piglit_4449: ad8992d3fb27fd604b9ab15e7963c42421ced85c @ git://anongit.freedesktop.org/piglit
== Linux commits ==
cd94e9f8e493 drm/i915/psr/cnl: Set y-coordinate as valid in SDP
48dc63739f2f drm/i915/debugfs: Print sink PSR status
02bba1aa3a2b drm/i915/psr/skl+: Print information about what caused a PSR exit
632045d33482 drm/i915/psr: Prevent PSR exit when a non-pipe related register is written
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_8802/issues.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 10+ messages in thread
* ✓ Fi.CI.IGT: success for series starting with [1/4] drm/i915/psr: Prevent PSR exit when a non-pipe related register is written
2018-04-25 21:23 [PATCH 1/4] drm/i915/psr: Prevent PSR exit when a non-pipe related register is written José Roberto de Souza
` (3 preceding siblings ...)
2018-04-25 22:06 ` ✓ Fi.CI.BAT: success for series starting with [1/4] drm/i915/psr: Prevent PSR exit when a non-pipe related register is written Patchwork
@ 2018-04-26 2:42 ` Patchwork
4 siblings, 0 replies; 10+ messages in thread
From: Patchwork @ 2018-04-26 2:42 UTC (permalink / raw)
To: Souza, Jose; +Cc: intel-gfx
== Series Details ==
Series: series starting with [1/4] drm/i915/psr: Prevent PSR exit when a non-pipe related register is written
URL : https://patchwork.freedesktop.org/series/42304/
State : success
== Summary ==
= CI Bug Log - changes from CI_DRM_4099_full -> Patchwork_8802_full =
== Summary - WARNING ==
Minor unknown changes coming with Patchwork_8802_full need to be verified
manually.
If you think the reported changes have nothing to do with the changes
introduced in Patchwork_8802_full, please notify your bug team to allow them
to document this new failure mode, which will reduce false positives in CI.
External URL: https://patchwork.freedesktop.org/api/1.0/series/42304/revisions/1/mbox/
== Possible new issues ==
Here are the unknown changes that may have been introduced in Patchwork_8802_full:
=== IGT changes ===
==== Warnings ====
igt@gem_exec_schedule@deep-bsd1:
shard-kbl: PASS -> SKIP +1
igt@gem_mocs_settings@mocs-rc6-vebox:
shard-kbl: SKIP -> PASS +2
== Known issues ==
Here are the changes found in Patchwork_8802_full that come from known issues:
=== IGT changes ===
==== Issues hit ====
igt@gem_workarounds@suspend-resume-context:
shard-apl: PASS -> FAIL (fdo#103375)
igt@kms_cursor_legacy@cursor-vs-flip-toggle:
shard-hsw: PASS -> FAIL (fdo#103355)
igt@kms_flip@flip-vs-absolute-wf_vblank-interruptible:
shard-hsw: PASS -> FAIL (fdo#103928)
shard-apl: PASS -> FAIL (fdo#100368)
igt@kms_flip@wf_vblank-ts-check-interruptible:
shard-glk: PASS -> FAIL (fdo#100368)
igt@kms_rotation_crc@primary-rotation-90:
shard-apl: PASS -> FAIL (fdo#103925)
igt@kms_rotation_crc@sprite-rotation-90-pos-100-0:
shard-apl: PASS -> DMESG-WARN (fdo#105127)
==== Possible fixes ====
igt@kms_atomic@plane_invalid_params:
shard-kbl: DMESG-WARN -> PASS
igt@kms_flip@2x-flip-vs-wf_vblank:
shard-hsw: FAIL (fdo#100368) -> PASS
igt@kms_flip@flip-vs-expired-vblank:
shard-hsw: FAIL (fdo#105707) -> PASS
igt@kms_flip@flip-vs-expired-vblank-interruptible:
shard-glk: FAIL (fdo#105363) -> PASS
igt@kms_flip@flip-vs-wf_vblank-interruptible:
shard-glk: FAIL (fdo#100368) -> PASS
igt@kms_sysfs_edid_timing:
shard-apl: WARN (fdo#100047) -> PASS
igt@kms_vblank@pipe-c-accuracy-idle:
shard-hsw: FAIL (fdo#102583) -> PASS
igt@perf@buffer-fill:
shard-kbl: INCOMPLETE (fdo#103665) -> PASS
fdo#100047 https://bugs.freedesktop.org/show_bug.cgi?id=100047
fdo#100368 https://bugs.freedesktop.org/show_bug.cgi?id=100368
fdo#102583 https://bugs.freedesktop.org/show_bug.cgi?id=102583
fdo#103355 https://bugs.freedesktop.org/show_bug.cgi?id=103355
fdo#103375 https://bugs.freedesktop.org/show_bug.cgi?id=103375
fdo#103665 https://bugs.freedesktop.org/show_bug.cgi?id=103665
fdo#103925 https://bugs.freedesktop.org/show_bug.cgi?id=103925
fdo#103928 https://bugs.freedesktop.org/show_bug.cgi?id=103928
fdo#105127 https://bugs.freedesktop.org/show_bug.cgi?id=105127
fdo#105363 https://bugs.freedesktop.org/show_bug.cgi?id=105363
fdo#105707 https://bugs.freedesktop.org/show_bug.cgi?id=105707
== Participating hosts (6 -> 5) ==
Missing (1): shard-glkb
== Build changes ==
* Linux: CI_DRM_4099 -> Patchwork_8802
CI_DRM_4099: 92a39635c2eca4dfe1c8c1673e0c606a720746e5 @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_4449: 0350f0e7f6a0e07281445fc3082aa70419f4aac7 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
Patchwork_8802: cd94e9f8e4937f47d54a2eb6e821020f388b5cdf @ git://anongit.freedesktop.org/gfx-ci/linux
piglit_4449: ad8992d3fb27fd604b9ab15e7963c42421ced85c @ git://anongit.freedesktop.org/piglit
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_8802/shards.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/4] drm/i915/psr/skl+: Print information about what caused a PSR exit
2018-04-25 21:53 ` Rodrigo Vivi
@ 2018-04-26 22:37 ` Rodrigo Vivi
0 siblings, 0 replies; 10+ messages in thread
From: Rodrigo Vivi @ 2018-04-26 22:37 UTC (permalink / raw)
To: Souza, Jose; +Cc: intel-gfx@lists.freedesktop.org, Pandiyan, Dhinakaran
On Wed, Apr 25, 2018 at 02:53:25PM -0700, Rodrigo Vivi wrote:
> On Wed, Apr 25, 2018 at 02:47:35PM -0700, Souza, Jose wrote:
> > On Wed, 2018-04-25 at 14:40 -0700, Rodrigo Vivi wrote:
> > > On Wed, Apr 25, 2018 at 02:23:32PM -0700, José Roberto de Souza
> > > wrote:
> > > > This will be helpful to debug what hardware is actually tracking
> > > > and causing PSR to exit.
> > > >
> > > > BSpec: 7721
> > > >
> > > > v4:
> > > > - Using _MMIO_TRANS2() in PSR_EVENT
> > > > - Cleaning events before printing
> > > >
> > > > Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
> > > > Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
> > > > Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> > > > ---
> > > > drivers/gpu/drm/i915/i915_reg.h | 23 ++++++++++++++++
> > > > drivers/gpu/drm/i915/intel_psr.c | 45
> > > > ++++++++++++++++++++++++++++++++
> > > > 2 files changed, 68 insertions(+)
> > > >
> > > > diff --git a/drivers/gpu/drm/i915/i915_reg.h
> > > > b/drivers/gpu/drm/i915/i915_reg.h
> > > > index 2dad655a710c..391825ae2361 100644
> > > > --- a/drivers/gpu/drm/i915/i915_reg.h
> > > > +++ b/drivers/gpu/drm/i915/i915_reg.h
> > > > @@ -4095,6 +4095,29 @@ enum {
> > > > #define EDP_PSR2_IDLE_FRAME_MASK 0xf
> > > > #define EDP_PSR2_IDLE_FRAME_SHIFT 0
> > > >
> > > > +#define _PSR_EVENT_TRANS_A 0x60848
> > > > +#define _PSR_EVENT_TRANS_B 0x61848
> > > > +#define _PSR_EVENT_TRANS_C 0x62848
> > > > +#define _PSR_EVENT_TRANS_D 0x63848
> > > > +#define _PSR_EVENT_TRANS_EDP 0x6F848
> > > > +#define PSR_EVENT(trans) _MMIO_TRANS2(trans
> > > > , _PSR_EVENT_TRANS_A)
> > > > +#define PSR_EVENT_PSR2_WD_TIMER_EXPIRE (1 << 17)
> > > > +#define PSR_EVENT_PSR2_DISABLED (1 << 16)
> > > > +#define PSR_EVENT_SU_DIRTY_FIFO_UNDERRUN (1 << 15)
> > > > +#define PSR_EVENT_SU_CRC_FIFO_UNDERRUN (1 << 14)
> > > > +#define PSR_EVENT_GRAPHICS_RESET (1 << 12)
> > > > +#define PSR_EVENT_PCH_INTERRUPT (1 << 11)
> > > > +#define PSR_EVENT_MEMORY_UP (1 << 10)
> > > > +#define PSR_EVENT_FRONT_BUFFER_MODIFY (1 << 9)
> > > > +#define PSR_EVENT_WD_TIMER_EXPIRE (1 << 8)
> > > > +#define PSR_EVENT_PIPE_REGISTERS_UPDATE (1 << 6)
> > > > +#define PSR_EVENT_REGISTER_UPDATE (1 << 5)
> > > > +#define PSR_EVENT_HDCP_ENABLE (1 << 4)
> > > > +#define PSR_EVENT_KVMR_SESSION_ENABLE (1 << 3)
> > > > +#define PSR_EVENT_VBI_ENABLE (1 << 2)
> > > > +#define PSR_EVENT_LPSP_MODE_EXIT (1 << 1)
> > > > +#define PSR_EVENT_PSR_DISABLE (1 << 0)
> > > > +
> > > > #define EDP_PSR2_STATUS _MMIO(0x6f940)
> > > > #define EDP_PSR2_STATUS_STATE_MASK (0xf<<28)
> > > > #define EDP_PSR2_STATUS_STATE_SHIFT 28
> > > > diff --git a/drivers/gpu/drm/i915/intel_psr.c
> > > > b/drivers/gpu/drm/i915/intel_psr.c
> > > > index e35a3b94fa69..c8d5cdce544f 100644
> > > > --- a/drivers/gpu/drm/i915/intel_psr.c
> > > > +++ b/drivers/gpu/drm/i915/intel_psr.c
> > > > @@ -125,6 +125,43 @@ void intel_psr_irq_control(struct
> > > > drm_i915_private *dev_priv, bool debug)
> > > > I915_WRITE(EDP_PSR_IMR, ~mask);
> > > > }
> > > >
> > > > +static void psr_event_print(u32 val, bool psr2_enabled)
> > > > +{
> > > > + DRM_DEBUG_KMS("PSR exit events: 0x%x\n", val);
> > > > + if (val & PSR_EVENT_PSR2_WD_TIMER_EXPIRE)
> > > > + DRM_DEBUG_KMS("\tPSR2 watchdog timer expired\n");
> > > > + if ((val & PSR_EVENT_PSR2_DISABLED) && psr2_enabled)
> > >
> > > I'm not sure if we should add this extra psr2_enable check here.
> > > Probably better to just print the bit reference and move one.
> > >
> > > otherwise we might have the risk of having a message
> > > "PSR exit events:"
> > > followed by nothing below it
> >
> > I'm okay with this too but I think is not necessary have 'PSR2
> > disabled' printed everytime when PSR is enabled.
>
> oh! I see your point now...
> Makes sense to minimize this noise, and let's hope we
> don't face the empty case.
>
> >
> > >
> > > > + DRM_DEBUG_KMS("\tPSR2 disabled\n");
> > > > + if (val & PSR_EVENT_SU_DIRTY_FIFO_UNDERRUN)
> > > > + DRM_DEBUG_KMS("\tSU dirty FIFO underrun\n");
> > > > + if (val & PSR_EVENT_SU_CRC_FIFO_UNDERRUN)
> > > > + DRM_DEBUG_KMS("\tSU CRC FIFO underrun\n");
> > > > + if (val & PSR_EVENT_GRAPHICS_RESET)
> > > > + DRM_DEBUG_KMS("\tGraphics reset\n");
> > > > + if (val & PSR_EVENT_PCH_INTERRUPT)
> > > > + DRM_DEBUG_KMS("\tPCH interrupt\n");
> > > > + if (val & PSR_EVENT_MEMORY_UP)
> > > > + DRM_DEBUG_KMS("\tMemory up\n");
> > > > + if (val & PSR_EVENT_FRONT_BUFFER_MODIFY)
> > > > + DRM_DEBUG_KMS("\tFront buffer modification\n");
> > > > + if (val & PSR_EVENT_WD_TIMER_EXPIRE)
> > > > + DRM_DEBUG_KMS("\tPSR watchdog timer expired\n");
> > > > + if (val & PSR_EVENT_PIPE_REGISTERS_UPDATE)
> > > > + DRM_DEBUG_KMS("\tPIPE registers updated\n");
> > > > + if (val & PSR_EVENT_REGISTER_UPDATE)
> > > > + DRM_DEBUG_KMS("\tRegister updated\n");
> > > > + if (val & PSR_EVENT_HDCP_ENABLE)
> > > > + DRM_DEBUG_KMS("\tHDCP enabled\n");
> > > > + if (val & PSR_EVENT_KVMR_SESSION_ENABLE)
> > > > + DRM_DEBUG_KMS("\tKVMR session enabled\n");
> > > > + if (val & PSR_EVENT_VBI_ENABLE)
> > > > + DRM_DEBUG_KMS("\tVBI enabled\n");
> > > > + if (val & PSR_EVENT_LPSP_MODE_EXIT)
> > > > + DRM_DEBUG_KMS("\tLPSP mode exited\n");
> > > > + if ((val & PSR_EVENT_PSR_DISABLE) && !psr2_enabled)
> > > > + DRM_DEBUG_KMS("\tPSR disabled\n");
> > > > +}
> > > > +
> > > > void intel_psr_irq_handler(struct drm_i915_private *dev_priv, u32
> > > > psr_iir)
> > > > {
> > > > u32 transcoders = BIT(TRANSCODER_EDP);
> > > > @@ -152,6 +189,14 @@ void intel_psr_irq_handler(struct
> > > > drm_i915_private *dev_priv, u32 psr_iir)
> > > > dev_priv->psr.last_exit = time_ns;
> > > > DRM_DEBUG_KMS("[transcoder %s] PSR exit
> > > > completed\n",
> > > > transcoder_name(cpu_transcod
> > > > er));
> > > > +
> > > > + if (INTEL_GEN(dev_priv) >= 9) {
> > > > + u32 val =
> > > > I915_READ(PSR_EVENT(cpu_transcoder));
> > > > + bool psr2_enabled = dev_priv-
> > > > >psr.psr2_enabled;
> > > > +
> > > > + I915_WRITE(PSR_EVENT(cpu_transcode
> > > > r), val);
> > >
> > > writing the value back really clears it?
> > > or should we clear by writting 0 to it?
> >
> > Yes, it is cleared by writing 1 to the bit.
>
> cool, thanks for the confirmation
>
> Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
>
> (as soon as CI give okay I will push them)
pushed to dinq, thanks
>
> >
> > >
> > > > + psr_event_print(val,
> > > > psr2_enabled);
> > > > + }
> > > > }
> > > > }
> > > > }
> > > > --
> > > > 2.17.0
> > > >
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2018-04-26 22:37 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-04-25 21:23 [PATCH 1/4] drm/i915/psr: Prevent PSR exit when a non-pipe related register is written José Roberto de Souza
2018-04-25 21:23 ` [PATCH 2/4] drm/i915/psr/skl+: Print information about what caused a PSR exit José Roberto de Souza
2018-04-25 21:40 ` Rodrigo Vivi
2018-04-25 21:47 ` Souza, Jose
2018-04-25 21:53 ` Rodrigo Vivi
2018-04-26 22:37 ` Rodrigo Vivi
2018-04-25 21:23 ` [PATCH 3/4] drm/i915/debugfs: Print sink PSR status José Roberto de Souza
2018-04-25 21:23 ` [PATCH 4/4] drm/i915/psr/cnl: Set y-coordinate as valid in SDP José Roberto de Souza
2018-04-25 22:06 ` ✓ Fi.CI.BAT: success for series starting with [1/4] drm/i915/psr: Prevent PSR exit when a non-pipe related register is written Patchwork
2018-04-26 2:42 ` ✓ Fi.CI.IGT: " Patchwork
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.