aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/platform/x86/intel_telemetry_debugfs.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/platform/x86/intel_telemetry_debugfs.c')
-rw-r--r--drivers/platform/x86/intel_telemetry_debugfs.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/drivers/platform/x86/intel_telemetry_debugfs.c b/drivers/platform/x86/intel_telemetry_debugfs.c
index 4249e8267bbc..5bc4f208cc8b 100644
--- a/drivers/platform/x86/intel_telemetry_debugfs.c
+++ b/drivers/platform/x86/intel_telemetry_debugfs.c
@@ -890,6 +890,31 @@ static int pm_suspend_exit_cb(void)
890 goto out; 890 goto out;
891 } 891 }
892 892
893 /*
894 * Due to some design limitations in the firmware, sometimes the
895 * counters do not get updated by the time we reach here. As a
896 * workaround, we try to see if this was a genuine case of sleep
897 * failure or not by cross-checking from PMC GCR registers directly.
898 */
899 if (suspend_shlw_ctr_exit == suspend_shlw_ctr_temp &&
900 suspend_deep_ctr_exit == suspend_deep_ctr_temp) {
901 ret = intel_pmc_gcr_read64(PMC_GCR_TELEM_SHLW_S0IX_REG,
902 &suspend_shlw_res_exit);
903 if (ret < 0)
904 goto out;
905
906 ret = intel_pmc_gcr_read64(PMC_GCR_TELEM_DEEP_S0IX_REG,
907 &suspend_deep_res_exit);
908 if (ret < 0)
909 goto out;
910
911 if (suspend_shlw_res_exit > suspend_shlw_res_temp)
912 suspend_shlw_ctr_exit++;
913
914 if (suspend_deep_res_exit > suspend_deep_res_temp)
915 suspend_deep_ctr_exit++;
916 }
917
893 suspend_shlw_ctr_exit -= suspend_shlw_ctr_temp; 918 suspend_shlw_ctr_exit -= suspend_shlw_ctr_temp;
894 suspend_deep_ctr_exit -= suspend_deep_ctr_temp; 919 suspend_deep_ctr_exit -= suspend_deep_ctr_temp;
895 suspend_shlw_res_exit -= suspend_shlw_res_temp; 920 suspend_shlw_res_exit -= suspend_shlw_res_temp;