Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ba84ed95 authored by Rafael J. Wysocki's avatar Rafael J. Wysocki Committed by Len Brown
Browse files

ACPI hibernate: Introduce new kernel parameter acpi_sleep=s4_nonvs



On some machines it may be necessary to disable the saving/restoring
of the ACPI NVS memory region during hibernation/resume.  For this
purpose, introduce new ACPI kernel command line option
acpi_sleep=s4_nonvs.

Based on a patch by Zhang Rui.

Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
Acked-by: default avatarNigel Cunningham <nigel@tuxonice.net>
Acked-by: default avatarPavel Machek <pavel@suse.cz>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parent b69edc76
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -149,7 +149,8 @@ and is between 256 and 4096 characters. It is defined in the file
			default: 0

	acpi_sleep=	[HW,ACPI] Sleep options
			Format: { s3_bios, s3_mode, s3_beep, s4_nohwsig, old_ordering }
			Format: { s3_bios, s3_mode, s3_beep, s4_nohwsig,
				  old_ordering, s4_nonvs }
			See Documentation/power/video.txt for s3_bios and s3_mode.
			s3_beep is for debugging; it makes the PC's speaker beep
			as soon as the kernel's real-mode entry point is called.
@@ -159,6 +160,8 @@ and is between 256 and 4096 characters. It is defined in the file
			control method, wrt putting devices into low power
			states, to be enforced (the ACPI 2.0 ordering of _PTS is
			used by default).
			s4_nonvs prevents the kernel from saving/restoring the
			ACPI NVS memory during hibernation.

	acpi_sci=	[HW,ACPI] ACPI System Control Interrupt trigger mode
			Format: { level | edge | high | low }
+2 −0
Original line number Diff line number Diff line
@@ -159,6 +159,8 @@ static int __init acpi_sleep_setup(char *str)
#endif
		if (strncmp(str, "old_ordering", 12) == 0)
			acpi_old_suspend_ordering();
		if (strncmp(str, "s4_nonvs", 8) == 0)
			acpi_s4_no_nvs();
		str = strchr(str, ',');
		if (str != NULL)
			str += strspn(str, ", \t");
+16 −2
Original line number Diff line number Diff line
@@ -101,6 +101,19 @@ void __init acpi_old_suspend_ordering(void)
 * cases.
 */
static bool set_sci_en_on_resume;
/*
 * The ACPI specification wants us to save NVS memory regions during hibernation
 * and to restore them during the subsequent resume.  However, it is not certain
 * if this mechanism is going to work on all machines, so we allow the user to
 * disable this mechanism using the 'acpi_sleep=s4_nonvs' kernel command line
 * option.
 */
static bool s4_no_nvs;

void __init acpi_s4_no_nvs(void)
{
	s4_no_nvs = true;
}

/**
 *	acpi_pm_disable_gpes - Disable the GPEs.
@@ -396,7 +409,7 @@ static int acpi_hibernation_begin(void)
{
	int error;

	error = hibernate_nvs_alloc();
	error = s4_no_nvs ? 0 : hibernate_nvs_alloc();
	if (!error) {
		acpi_target_sleep_state = ACPI_STATE_S4;
		acpi_sleep_tts_switch(acpi_target_sleep_state);
@@ -494,6 +507,7 @@ static int acpi_hibernation_begin_old(void)
	error = acpi_sleep_prepare(ACPI_STATE_S4);

	if (!error) {
		if (!s4_no_nvs)
			error = hibernate_nvs_alloc();
		if (!error)
			acpi_target_sleep_state = ACPI_STATE_S4;
+1 −0
Original line number Diff line number Diff line
@@ -270,6 +270,7 @@ int acpi_check_mem_region(resource_size_t start, resource_size_t n,
#ifdef CONFIG_PM_SLEEP
void __init acpi_no_s4_hw_signature(void);
void __init acpi_old_suspend_ordering(void);
void __init acpi_s4_no_nvs(void);
#endif /* CONFIG_PM_SLEEP */
#else	/* CONFIG_ACPI */