diff options
author | Tony Lindgren <tony@atomide.com> | 2014-09-16 16:50:01 -0400 |
---|---|---|
committer | Tony Luck <tony.luck@intel.com> | 2014-12-11 16:38:31 -0500 |
commit | 027bc8b08242c59e19356b4b2c189f2d849ab660 (patch) | |
tree | 4bd5ad81fef12692af2c9d278f14903d15ddfb60 /include/linux/pstore_ram.h | |
parent | 7ae9cb81933515dc7db1aa3c47ef7653717e3090 (diff) |
pstore-ram: Allow optional mapping with pgprot_noncached
On some ARMs the memory can be mapped pgprot_noncached() and still
be working for atomic operations. As pointed out by Colin Cross
<ccross@android.com>, in some cases you do want to use
pgprot_noncached() if the SoC supports it to see a debug printk
just before a write hanging the system.
On ARMs, the atomic operations on strongly ordered memory are
implementation defined. So let's provide an optional kernel parameter
for configuring pgprot_noncached(), and use pgprot_writecombine() by
default.
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Rob Herring <robherring2@gmail.com>
Cc: Randy Dunlap <rdunlap@infradead.org>
Cc: Anton Vorontsov <anton@enomsg.org>
Cc: Colin Cross <ccross@android.com>
Cc: Olof Johansson <olof@lixom.net>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: stable@vger.kernel.org
Acked-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
Diffstat (limited to 'include/linux/pstore_ram.h')
-rw-r--r-- | include/linux/pstore_ram.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/include/linux/pstore_ram.h b/include/linux/pstore_ram.h index 9974975d40db..4af3fdc85b01 100644 --- a/include/linux/pstore_ram.h +++ b/include/linux/pstore_ram.h | |||
@@ -53,7 +53,8 @@ struct persistent_ram_zone { | |||
53 | }; | 53 | }; |
54 | 54 | ||
55 | struct persistent_ram_zone *persistent_ram_new(phys_addr_t start, size_t size, | 55 | struct persistent_ram_zone *persistent_ram_new(phys_addr_t start, size_t size, |
56 | u32 sig, struct persistent_ram_ecc_info *ecc_info); | 56 | u32 sig, struct persistent_ram_ecc_info *ecc_info, |
57 | unsigned int memtype); | ||
57 | void persistent_ram_free(struct persistent_ram_zone *prz); | 58 | void persistent_ram_free(struct persistent_ram_zone *prz); |
58 | void persistent_ram_zap(struct persistent_ram_zone *prz); | 59 | void persistent_ram_zap(struct persistent_ram_zone *prz); |
59 | 60 | ||
@@ -76,6 +77,7 @@ ssize_t persistent_ram_ecc_string(struct persistent_ram_zone *prz, | |||
76 | struct ramoops_platform_data { | 77 | struct ramoops_platform_data { |
77 | unsigned long mem_size; | 78 | unsigned long mem_size; |
78 | unsigned long mem_address; | 79 | unsigned long mem_address; |
80 | unsigned int mem_type; | ||
79 | unsigned long record_size; | 81 | unsigned long record_size; |
80 | unsigned long console_size; | 82 | unsigned long console_size; |
81 | unsigned long ftrace_size; | 83 | unsigned long ftrace_size; |