diff options
author | Aaro Koskinen <aaro.koskinen@iki.fi> | 2012-08-29 11:24:31 -0400 |
---|---|---|
committer | Tony Lindgren <tony@atomide.com> | 2012-08-30 16:38:38 -0400 |
commit | b285673489e39252a2c3f0c7a7d77fd28a6cda38 (patch) | |
tree | b6815676dad589baec4634e90b312f331fbcdc76 /arch/arm/plat-omap/sram.c | |
parent | 528c28f5c1cd435c45515b323919205c95342331 (diff) |
ARM: OMAP: sram: skip the first 16K on OMAP3 HS
In some OMAP3 HS devices (at least Nokia N9 and N950), the public SRAM
seems to conflict with secure portition of SRAM. When booting the 3.6-rc3
kernel (and also earlier) on these devices, the kernel gets tainted with
tons of the following warnings:
[ 6.894348] In-band Error seen by MPU at address 0
[...]
[ 6.894378] WARNING: at arch/arm/mach-omap2/omap_l3_smx.c:162
Fix this by skipping the first 16K of the public SRAM. (Note that the
mapping could not be changed, as it resulted in secure monitor call
failure in save_secure_sram().)
This will leave 12K SRAM available that should be still sufficient. The
patch has been boot tested with vanilla 3.6-rc3 on N900, N950 and N9.
Signed-off-by: Aaro Koskinen <aaro.koskinen@iki.fi>
Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Diffstat (limited to 'arch/arm/plat-omap/sram.c')
-rw-r--r-- | arch/arm/plat-omap/sram.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/arch/arm/plat-omap/sram.c b/arch/arm/plat-omap/sram.c index 85c23db2503..024f3b08db2 100644 --- a/arch/arm/plat-omap/sram.c +++ b/arch/arm/plat-omap/sram.c | |||
@@ -68,6 +68,7 @@ | |||
68 | 68 | ||
69 | static unsigned long omap_sram_start; | 69 | static unsigned long omap_sram_start; |
70 | static void __iomem *omap_sram_base; | 70 | static void __iomem *omap_sram_base; |
71 | static unsigned long omap_sram_skip; | ||
71 | static unsigned long omap_sram_size; | 72 | static unsigned long omap_sram_size; |
72 | static void __iomem *omap_sram_ceil; | 73 | static void __iomem *omap_sram_ceil; |
73 | 74 | ||
@@ -106,6 +107,7 @@ static int is_sram_locked(void) | |||
106 | */ | 107 | */ |
107 | static void __init omap_detect_sram(void) | 108 | static void __init omap_detect_sram(void) |
108 | { | 109 | { |
110 | omap_sram_skip = SRAM_BOOTLOADER_SZ; | ||
109 | if (cpu_class_is_omap2()) { | 111 | if (cpu_class_is_omap2()) { |
110 | if (is_sram_locked()) { | 112 | if (is_sram_locked()) { |
111 | if (cpu_is_omap34xx()) { | 113 | if (cpu_is_omap34xx()) { |
@@ -113,6 +115,7 @@ static void __init omap_detect_sram(void) | |||
113 | if ((omap_type() == OMAP2_DEVICE_TYPE_EMU) || | 115 | if ((omap_type() == OMAP2_DEVICE_TYPE_EMU) || |
114 | (omap_type() == OMAP2_DEVICE_TYPE_SEC)) { | 116 | (omap_type() == OMAP2_DEVICE_TYPE_SEC)) { |
115 | omap_sram_size = 0x7000; /* 28K */ | 117 | omap_sram_size = 0x7000; /* 28K */ |
118 | omap_sram_skip += SZ_16K; | ||
116 | } else { | 119 | } else { |
117 | omap_sram_size = 0x8000; /* 32K */ | 120 | omap_sram_size = 0x8000; /* 32K */ |
118 | } | 121 | } |
@@ -205,8 +208,8 @@ static void __init omap_map_sram(void) | |||
205 | * Looks like we need to preserve some bootloader code at the | 208 | * Looks like we need to preserve some bootloader code at the |
206 | * beginning of SRAM for jumping to flash for reboot to work... | 209 | * beginning of SRAM for jumping to flash for reboot to work... |
207 | */ | 210 | */ |
208 | memset_io(omap_sram_base + SRAM_BOOTLOADER_SZ, 0, | 211 | memset_io(omap_sram_base + omap_sram_skip, 0, |
209 | omap_sram_size - SRAM_BOOTLOADER_SZ); | 212 | omap_sram_size - omap_sram_skip); |
210 | } | 213 | } |
211 | 214 | ||
212 | /* | 215 | /* |
@@ -220,7 +223,7 @@ void *omap_sram_push_address(unsigned long size) | |||
220 | { | 223 | { |
221 | unsigned long available, new_ceil = (unsigned long)omap_sram_ceil; | 224 | unsigned long available, new_ceil = (unsigned long)omap_sram_ceil; |
222 | 225 | ||
223 | available = omap_sram_ceil - (omap_sram_base + SRAM_BOOTLOADER_SZ); | 226 | available = omap_sram_ceil - (omap_sram_base + omap_sram_skip); |
224 | 227 | ||
225 | if (size > available) { | 228 | if (size > available) { |
226 | pr_err("Not enough space in SRAM\n"); | 229 | pr_err("Not enough space in SRAM\n"); |