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

Commit 42de5532 authored by Len Brown's avatar Len Brown
Browse files

Merge branch 'bugzilla-13931-sleep-nvs' into release



Conflicts:
	drivers/acpi/sleep.c

Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parents e9e8b4dd 2a6b6976
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -729,7 +729,7 @@ static int __init e820_mark_nvs_memory(void)
		struct e820entry *ei = &e820.map[i];

		if (ei->type == E820_NVS)
			hibernate_nvs_register(ei->addr, ei->size);
			suspend_nvs_register(ei->addr, ei->size);
	}

	return 0;
+19 −15
Original line number Diff line number Diff line
@@ -114,6 +114,8 @@ static int __acpi_pm_prepare(void)
{
	int error = acpi_sleep_prepare(acpi_target_sleep_state);

	suspend_nvs_save();

	if (error)
		acpi_target_sleep_state = ACPI_STATE_S0;
	return error;
@@ -143,6 +145,9 @@ static void acpi_pm_finish(void)
{
	u32 acpi_state = acpi_target_sleep_state;

	suspend_nvs_free();
	acpi_ec_unblock_transactions();

	if (acpi_state == ACPI_STATE_S0)
		return;

@@ -192,6 +197,11 @@ static int acpi_suspend_begin(suspend_state_t pm_state)
	u32 acpi_state = acpi_suspend_states[pm_state];
	int error = 0;

	error = suspend_nvs_alloc();

	if (error)
		return error;

	if (sleep_states[acpi_state]) {
		acpi_target_sleep_state = acpi_state;
		acpi_sleep_tts_switch(acpi_target_sleep_state);
@@ -269,12 +279,13 @@ static int acpi_suspend_enter(suspend_state_t pm_state)
	if (acpi_state == ACPI_STATE_S3)
		acpi_restore_state_mem();

	suspend_nvs_restore();

	return ACPI_SUCCESS(status) ? 0 : -EFAULT;
}

static void acpi_suspend_finish(void)
{
	acpi_ec_unblock_transactions();
	acpi_pm_finish();
}

@@ -404,7 +415,7 @@ static int acpi_hibernation_begin(void)
{
	int error;

	error = s4_no_nvs ? 0 : hibernate_nvs_alloc();
	error = s4_no_nvs ? 0 : suspend_nvs_alloc();
	if (!error) {
		acpi_target_sleep_state = ACPI_STATE_S4;
		acpi_sleep_tts_switch(acpi_target_sleep_state);
@@ -418,7 +429,7 @@ static int acpi_hibernation_pre_snapshot(void)
	int error = acpi_pm_prepare();

	if (!error)
		hibernate_nvs_save();
		suspend_nvs_save();

	return error;
}
@@ -441,13 +452,6 @@ static int acpi_hibernation_enter(void)
	return ACPI_SUCCESS(status) ? 0 : -EFAULT;
}

static void acpi_hibernation_finish(void)
{
	hibernate_nvs_free();
	acpi_ec_unblock_transactions();
	acpi_pm_finish();
}

static void acpi_hibernation_leave(void)
{
	/*
@@ -464,7 +468,7 @@ static void acpi_hibernation_leave(void)
		panic("ACPI S4 hardware signature mismatch");
	}
	/* Restore the NVS memory area */
	hibernate_nvs_restore();
	suspend_nvs_restore();
	/* Allow EC transactions to happen. */
	acpi_ec_unblock_transactions_early();
}
@@ -479,7 +483,7 @@ static struct platform_hibernation_ops acpi_hibernation_ops = {
	.begin = acpi_hibernation_begin,
	.end = acpi_pm_end,
	.pre_snapshot = acpi_hibernation_pre_snapshot,
	.finish = acpi_hibernation_finish,
	.finish = acpi_pm_finish,
	.prepare = acpi_pm_prepare,
	.enter = acpi_hibernation_enter,
	.leave = acpi_hibernation_leave,
@@ -507,7 +511,7 @@ static int acpi_hibernation_begin_old(void)

	if (!error) {
		if (!s4_no_nvs)
			error = hibernate_nvs_alloc();
			error = suspend_nvs_alloc();
		if (!error)
			acpi_target_sleep_state = ACPI_STATE_S4;
	}
@@ -517,7 +521,7 @@ static int acpi_hibernation_begin_old(void)
static int acpi_hibernation_pre_snapshot_old(void)
{
	acpi_pm_freeze();
	hibernate_nvs_save();
	suspend_nvs_save();
	return 0;
}

@@ -529,8 +533,8 @@ static struct platform_hibernation_ops acpi_hibernation_ops_old = {
	.begin = acpi_hibernation_begin_old,
	.end = acpi_pm_end,
	.pre_snapshot = acpi_hibernation_pre_snapshot_old,
	.finish = acpi_hibernation_finish,
	.prepare = acpi_pm_freeze,
	.finish = acpi_pm_finish,
	.enter = acpi_hibernation_enter,
	.leave = acpi_hibernation_leave,
	.pre_restore = acpi_pm_freeze,
+13 −13
Original line number Diff line number Diff line
@@ -256,22 +256,22 @@ static inline int hibernate(void) { return -ENOSYS; }
static inline bool system_entering_hibernation(void) { return false; }
#endif /* CONFIG_HIBERNATION */

#ifdef CONFIG_HIBERNATION_NVS
extern int hibernate_nvs_register(unsigned long start, unsigned long size);
extern int hibernate_nvs_alloc(void);
extern void hibernate_nvs_free(void);
extern void hibernate_nvs_save(void);
extern void hibernate_nvs_restore(void);
#else /* CONFIG_HIBERNATION_NVS */
static inline int hibernate_nvs_register(unsigned long a, unsigned long b)
#ifdef CONFIG_SUSPEND_NVS
extern int suspend_nvs_register(unsigned long start, unsigned long size);
extern int suspend_nvs_alloc(void);
extern void suspend_nvs_free(void);
extern void suspend_nvs_save(void);
extern void suspend_nvs_restore(void);
#else /* CONFIG_SUSPEND_NVS */
static inline int suspend_nvs_register(unsigned long a, unsigned long b)
{
	return 0;
}
static inline int hibernate_nvs_alloc(void) { return 0; }
static inline void hibernate_nvs_free(void) {}
static inline void hibernate_nvs_save(void) {}
static inline void hibernate_nvs_restore(void) {}
#endif /* CONFIG_HIBERNATION_NVS */
static inline int suspend_nvs_alloc(void) { return 0; }
static inline void suspend_nvs_free(void) {}
static inline void suspend_nvs_save(void) {}
static inline void suspend_nvs_restore(void) {}
#endif /* CONFIG_SUSPEND_NVS */

#ifdef CONFIG_PM_SLEEP
void save_processor_state(void);
+5 −4
Original line number Diff line number Diff line
@@ -99,9 +99,13 @@ config PM_SLEEP_ADVANCED_DEBUG
	depends on PM_ADVANCED_DEBUG
	default n

config SUSPEND_NVS
       bool

config SUSPEND
	bool "Suspend to RAM and standby"
	depends on PM && ARCH_SUSPEND_POSSIBLE
	select SUSPEND_NVS if HAS_IOMEM
	default y
	---help---
	  Allow the system to enter sleep states in which main memory is
@@ -130,13 +134,10 @@ config SUSPEND_FREEZER

	  Turning OFF this setting is NOT recommended! If in doubt, say Y.

config HIBERNATION_NVS
	bool

config HIBERNATION
	bool "Hibernation (aka 'suspend to disk')"
	depends on PM && SWAP && ARCH_HIBERNATION_POSSIBLE
	select HIBERNATION_NVS if HAS_IOMEM
	select SUSPEND_NVS if HAS_IOMEM
	---help---
	  Enable the suspend to disk (STD) functionality, which is usually
	  called "hibernation" in user interfaces.  STD checkpoints the
+1 −1
Original line number Diff line number Diff line
@@ -10,6 +10,6 @@ obj-$(CONFIG_SUSPEND) += suspend.o
obj-$(CONFIG_PM_TEST_SUSPEND)	+= suspend_test.o
obj-$(CONFIG_HIBERNATION)	+= hibernate.o snapshot.o swap.o user.o \
				   block_io.o
obj-$(CONFIG_HIBERNATION_NVS)	+= hibernate_nvs.o
obj-$(CONFIG_SUSPEND_NVS)	+= nvs.o

obj-$(CONFIG_MAGIC_SYSRQ)	+= poweroff.o
Loading