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

Commit d16675e1 authored by Len Brown's avatar Len Brown
Browse files

Merge branch 'suspend-ioremap-cache' into release

parents fb4af417 6d5bbf00
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -426,6 +426,11 @@ extern void __iomem * ioremap_nocache (unsigned long offset, unsigned long size)
extern void iounmap (volatile void __iomem *addr);
extern void __iomem * early_ioremap (unsigned long phys_addr, unsigned long size);
extern void early_iounmap (volatile void __iomem *addr, unsigned long size);
static inline void __iomem * ioremap_cache (unsigned long phys_addr, unsigned long size)
{
	return ioremap(phys_addr, size);
}


/*
 * String version of IO memory access ops:
+1 −0
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@
#include <linux/bootmem.h>
#include <linux/pfn.h>
#include <linux/suspend.h>
#include <linux/acpi.h>
#include <linux/firmware-map.h>
#include <linux/memblock.h>

+1 −1
Original line number Diff line number Diff line
@@ -24,7 +24,7 @@ acpi-y += atomicio.o
# sleep related files
acpi-y				+= wakeup.o
acpi-y				+= sleep.o
acpi-$(CONFIG_ACPI_SLEEP)	+= proc.o
acpi-$(CONFIG_ACPI_SLEEP)	+= proc.o nvs.o


#
+8 −0
Original line number Diff line number Diff line
@@ -83,8 +83,16 @@ extern int acpi_sleep_init(void);

#ifdef CONFIG_ACPI_SLEEP
int acpi_sleep_proc_init(void);
int suspend_nvs_alloc(void);
void suspend_nvs_free(void);
int suspend_nvs_save(void);
void suspend_nvs_restore(void);
#else
static inline int acpi_sleep_proc_init(void) { return 0; }
static inline int suspend_nvs_alloc(void) { return 0; }
static inline void suspend_nvs_free(void) {}
static inline int suspend_nvs_save(void) {}
static inline void suspend_nvs_restore(void) {}
#endif

#endif /* _ACPI_INTERNAL_H_ */
+14 −6
Original line number Diff line number Diff line
/*
 * linux/kernel/power/hibernate_nvs.c - Routines for handling NVS memory
 * nvs.c - Routines for saving and restoring ACPI NVS memory region
 *
 * Copyright (C) 2008,2009 Rafael J. Wysocki <rjw@sisk.pl>, Novell Inc.
 * Copyright (C) 2008-2011 Rafael J. Wysocki <rjw@sisk.pl>, Novell Inc.
 *
 * This file is released under the GPLv2.
 */
@@ -11,7 +11,8 @@
#include <linux/list.h>
#include <linux/mm.h>
#include <linux/slab.h>
#include <linux/suspend.h>
#include <linux/acpi.h>
#include <acpi/acpiosxf.h>

/*
 * Platforms, like ACPI, may want us to save some memory used by them during
@@ -79,7 +80,7 @@ void suspend_nvs_free(void)
			free_page((unsigned long)entry->data);
			entry->data = NULL;
			if (entry->kaddr) {
				iounmap(entry->kaddr);
				acpi_os_unmap_memory(entry->kaddr, entry->size);
				entry->kaddr = NULL;
			}
		}
@@ -105,7 +106,7 @@ int suspend_nvs_alloc(void)
/**
 *	suspend_nvs_save - save NVS memory regions
 */
void suspend_nvs_save(void)
int suspend_nvs_save(void)
{
	struct nvs_page *entry;

@@ -113,9 +114,16 @@ void suspend_nvs_save(void)

	list_for_each_entry(entry, &nvs_list, node)
		if (entry->data) {
			entry->kaddr = ioremap(entry->phys_start, entry->size);
			entry->kaddr = acpi_os_map_memory(entry->phys_start,
							  entry->size);
			if (!entry->kaddr) {
				suspend_nvs_free();
				return -ENOMEM;
			}
			memcpy(entry->data, entry->kaddr, entry->size);
		}

	return 0;
}

/**
Loading