platform/x86/amd/pmc: Check for intermediate wakeup in function

Refactor code introduced by commit 9f5595d5f0 ("pmc: Require at
least 2.5 seconds between HW sleep cycles") to allow adding different
conditions for that delay in an upcoming change.

Signed-off-by: Daniel Gibson <daniel@gibson.sh>
Cc: stable@vger.kernel.org
Link: https://patch.msgid.link/20260611150426.3683372-2-daniel@gibson.sh
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
This commit is contained in:
Daniel Gibson 2026-06-11 17:04:23 +02:00 committed by Ilpo Järvinen
parent 01ffffc4d0
commit 3bdd6fc11f
No known key found for this signature in database
GPG Key ID: 59AC4F6153E5CE31

View File

@ -670,6 +670,19 @@ static int amd_pmc_verify_czn_rtc(struct amd_pmc_dev *pdev, u32 *arg)
return rc;
}
static bool amd_pmc_intermediate_wakeup_need_delay(struct amd_pmc_dev *pdev)
{
/*
* Starting a new HW sleep cycle right after waking from one
* can cause electrical problems triggering the over voltage protection.
* That is avoided by delaying the next suspend a bit, see also
* https://lore.kernel.org/all/20250414162446.3853194-1-superm1@kernel.org/
*/
struct smu_metrics table;
return get_metrics_table(pdev, &table) == 0 && table.s0i3_last_entry_status;
}
static void amd_pmc_s2idle_prepare(void)
{
struct amd_pmc_dev *pdev = &pmc;
@ -702,11 +715,9 @@ static void amd_pmc_s2idle_prepare(void)
static void amd_pmc_s2idle_check(void)
{
struct amd_pmc_dev *pdev = &pmc;
struct smu_metrics table;
int rc;
/* Avoid triggering OVP */
if (!get_metrics_table(pdev, &table) && table.s0i3_last_entry_status)
if (amd_pmc_intermediate_wakeup_need_delay(pdev))
msleep(2500);
/* Dump the IdleMask before we add to the STB */