platform/x86/intel/pmc: core: Always capture counters on suspend
authorMario Limonciello <mario.limonciello@amd.com>
Mon, 17 Apr 2023 15:27:07 +0000 (10:27 -0500)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 20 Apr 2023 17:06:12 +0000 (19:06 +0200)
Currently counters are only captured during suspend when the
warn_on_s0ix_failures module parameter is set.

In order to relay this counter information to the kernel reporting
infrastructure adjust it so that the counters are always captured.

warn_on_s0ix_failures will be utilized solely for messaging by
the driver instead.

Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: David E. Box <david.e.box@linux.intel.com>
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/platform/x86/intel/pmc/core.c
drivers/platform/x86/intel/pmc/core.h

index b9591969e0fa119bf84710e2cee4cddf61541ee0..925c5d676a43e1dbb2f26a0f18bfd47aa63bc7da 100644 (file)
@@ -1179,12 +1179,6 @@ static __maybe_unused int pmc_core_suspend(struct device *dev)
 {
        struct pmc_dev *pmcdev = dev_get_drvdata(dev);
 
-       pmcdev->check_counters = false;
-
-       /* No warnings on S0ix failures */
-       if (!warn_on_s0ix_failures)
-               return 0;
-
        /* Check if the syspend will actually use S0ix */
        if (pm_suspend_via_firmware())
                return 0;
@@ -1197,7 +1191,6 @@ static __maybe_unused int pmc_core_suspend(struct device *dev)
        if (pmc_core_dev_state_get(pmcdev, &pmcdev->s0ix_counter))
                return -EIO;
 
-       pmcdev->check_counters = true;
        return 0;
 }
 
@@ -1233,12 +1226,16 @@ static __maybe_unused int pmc_core_resume(struct device *dev)
        const struct pmc_bit_map **maps = pmcdev->map->lpm_sts;
        int offset = pmcdev->map->lpm_status_offset;
 
-       if (!pmcdev->check_counters)
+       /* Check if the syspend used S0ix */
+       if (pm_suspend_via_firmware())
                return 0;
 
        if (!pmc_core_is_s0ix_failed(pmcdev))
                return 0;
 
+       if (!warn_on_s0ix_failures)
+               return 0;
+
        if (pmc_core_is_pc10_failed(pmcdev)) {
                /* S0ix failed because of PC10 entry failure */
                dev_info(dev, "CPU did not enter PC10!!! (PC10 cnt=0x%llx)\n",
index 810204d758ab3a6b33d53092b87739ca5db2ac5a..51d73efceaf3b40ee7f9cc48f3ef3e5cbc41cacb 100644 (file)
@@ -319,7 +319,6 @@ struct pmc_reg_map {
  * @pmc_xram_read_bit: flag to indicate whether PMC XRAM shadow registers
  *                     used to read MPHY PG and PLL status are available
  * @mutex_lock:                mutex to complete one transcation
- * @check_counters:    On resume, check if counters are getting incremented
  * @pc10_counter:      PC10 residency counter
  * @s0ix_counter:      S0ix residency (step adjusted)
  * @num_lpm_modes:     Count of enabled modes
@@ -338,7 +337,6 @@ struct pmc_dev {
        int pmc_xram_read_bit;
        struct mutex lock; /* generic mutex lock for PMC Core */
 
-       bool check_counters; /* Check for counter increments on resume */
        u64 pc10_counter;
        u64 s0ix_counter;
        int num_lpm_modes;