linuxkpi: Support s2idle in pm_suspend_target_state

When going to s2idle, set Linux' pm_suspend_target_state to
PM_SUSPEND_TO_IDLE instead of setting PM_SUSPEND_MEM (for S3) in all
cases.

This is necessary because more recent versions of the amdgpu DRM drivers
have different paths for when entering s2idle & S0ix is supported than
S3.

Reviewed by:	bz
Approved by:	bz
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D51591
This commit is contained in:
Aymeric Wibo
2025-10-06 23:38:58 +02:00
parent fc2ed9d968
commit a25cfcab9a
+20 -10
View File
@@ -119,17 +119,27 @@ acpi_evaluate_dsm(ACPI_HANDLE ObjHandle, const guid_t *guid,
}
static void
linux_handle_power_suspend_event(void *arg __unused,
enum power_stype stype __unused)
linux_handle_power_suspend_event(void *arg __unused, enum power_stype stype)
{
/*
* Only support S3 for now.
* acpi_sleep_event isn't always called so we use power_suspend_early
* instead which means we don't know what state we're switching to.
* TODO: Make acpi_sleep_event consistent
*/
linux_acpi_target_sleep_state = ACPI_STATE_S3;
pm_suspend_target_state = PM_SUSPEND_MEM;
switch (stype) {
case POWER_STYPE_SUSPEND_TO_IDLE:
/*
* XXX: obiwac Not 100% sure this is correct, but
* acpi_target_sleep_state does seem to be set to
* ACPI_STATE_S3 during s2idle on Linux.
*/
linux_acpi_target_sleep_state = ACPI_STATE_S3;
pm_suspend_target_state = PM_SUSPEND_TO_IDLE;
break;
case POWER_STYPE_SUSPEND_TO_MEM:
linux_acpi_target_sleep_state = ACPI_STATE_S3;
pm_suspend_target_state = PM_SUSPEND_MEM;
break;
default:
printf("%s: sleep type %d not yet supported\n",
__func__, stype);
break;
}
}
static void