aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips
diff options
context:
space:
mode:
authorHauke Mehrtens <hauke@hauke-m.de>2012-10-03 07:34:16 -0400
committerJohn Crispin <blogic@openwrt.org>2012-11-09 05:37:17 -0500
commitd3dce3d676373b1519546721ee5f3a8c613f40f5 (patch)
tree07eae00399f41cbc19c6e18177d86ab04c2ee647 /arch/mips
parentb5b64f2ba434cd2082a89aecec4b4c1eaec742c0 (diff)
MIPS: BCM47XX: ignore last memory page
Ignoring the last page when ddr size is 128M. Cached accesses to last page is causing the processor to prefetch using address above 128M stepping out of the ddr address space. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> Patchwork: http://patchwork.linux-mips.org/patch/4365 Signed-off-by: John Crispin <blogic@openwrt.org>
Diffstat (limited to 'arch/mips')
-rw-r--r--arch/mips/bcm47xx/prom.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/arch/mips/bcm47xx/prom.c b/arch/mips/bcm47xx/prom.c
index f6e9063cc4c2..22258a4c652b 100644
--- a/arch/mips/bcm47xx/prom.c
+++ b/arch/mips/bcm47xx/prom.c
@@ -27,6 +27,7 @@
27#include <linux/types.h> 27#include <linux/types.h>
28#include <linux/kernel.h> 28#include <linux/kernel.h>
29#include <linux/spinlock.h> 29#include <linux/spinlock.h>
30#include <linux/smp.h>
30#include <asm/bootinfo.h> 31#include <asm/bootinfo.h>
31#include <asm/fw/cfe/cfe_api.h> 32#include <asm/fw/cfe/cfe_api.h>
32#include <asm/fw/cfe/cfe_error.h> 33#include <asm/fw/cfe/cfe_error.h>
@@ -127,6 +128,7 @@ static __init void prom_init_mem(void)
127{ 128{
128 unsigned long mem; 129 unsigned long mem;
129 unsigned long max; 130 unsigned long max;
131 struct cpuinfo_mips *c = &current_cpu_data;
130 132
131 /* Figure out memory size by finding aliases. 133 /* Figure out memory size by finding aliases.
132 * 134 *
@@ -155,6 +157,14 @@ static __init void prom_init_mem(void)
155 break; 157 break;
156 } 158 }
157 159
160 /* Ignoring the last page when ddr size is 128M. Cached
161 * accesses to last page is causing the processor to prefetch
162 * using address above 128M stepping out of the ddr address
163 * space.
164 */
165 if (c->cputype == CPU_74K && (mem == (128 << 20)))
166 mem -= 0x1000;
167
158 add_memory_region(0, mem, BOOT_MEM_RAM); 168 add_memory_region(0, mem, BOOT_MEM_RAM);
159} 169}
160 170