PSR1 and PSR2 enable sequence are mutually exclusive.
Register SRD_PERF_COUNT increments while system is in psr1.
This register is not valid for psr2.while in psr2,SRD_PERF_COUNT
is always 0.
Reporting psr perfcount from SRD_PERF_COUNT is not valid for psr2 case.
Also, if dc6 is disabled via kernel parameter i915.enable_dc=0,
EDP_PSR_PERF_CNT can be reported for SKL+ platforms for debug
purpose.

Cc: Rodrigo Vivi <rodrigo.vivi at intel.com>
Cc: Jim Bride <jim.bride at linux.intel.com>
Signed-off-by: Vathsala Nagaraju <vathsala.nagaraju at intel.com>
---
 drivers/gpu/drm/i915/i915_debugfs.c | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_debugfs.c 
b/drivers/gpu/drm/i915/i915_debugfs.c
index 8b0e3f9..4136cec 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -2539,6 +2539,7 @@ static int i915_edp_psr_status(struct seq_file *m, void 
*data)
        u32 stat[3];
        enum pipe pipe;
        bool enabled = false;
+       bool dc6_enabled = false;

        if (!HAS_PSR(dev_priv)) {
                seq_puts(m, "PSR not supported\n");
@@ -2598,11 +2599,20 @@ static int i915_edp_psr_status(struct seq_file *m, void 
*data)

        /*
         * VLV/CHV PSR has no kind of performance counter
+        * EDP_PSR_PERF_CNT is not valid for psr2.
         * SKL+ Perf counter is reset to 0 everytime DC state is entered
+        * if we want to read EDP_PSR_PERF_CNT for debug purpose on SKL+,
+        * disable dc state in kernel parameter i915.enable_dc=0.
         */
-       if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv)) {
+
+       dc6_enabled = ((I915_READ(DC_STATE_EN) &
+                       DC_STATE_EN_UPTO_DC5_DC6_MASK) ==
+                       DC_STATE_EN_UPTO_DC6);
+
+       if ((!dev_priv->psr.psr2_support && !dc6_enabled) ||
+            IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv)) {
                psrperf = I915_READ(EDP_PSR_PERF_CNT) &
-                       EDP_PSR_PERF_CNT_MASK;
+                         EDP_PSR_PERF_CNT_MASK;

                seq_printf(m, "Performance_Counter: %u\n", psrperf);
        }
-- 
1.9.1

Reply via email to