aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/boot/4xx.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2008-06-12 11:27:22 +0200
committerIngo Molnar <mingo@elte.hu>2008-06-12 11:27:22 +0200
commitbb6dfb32f90094fea647e1f27d994a8b6ddd2766 (patch)
treee63681727543bcc3251bbc82b81a9cc822cc3f5e /arch/powerpc/boot/4xx.c
parent4f384f8bcdb5d618a0a68fb84c809e602c798b8f (diff)
parent5e70b7f3c24468bb1635b295945edb48ecd9656a (diff)
downloadkernel_samsung_smdk4412-bb6dfb32f90094fea647e1f27d994a8b6ddd2766.zip
kernel_samsung_smdk4412-bb6dfb32f90094fea647e1f27d994a8b6ddd2766.tar.gz
kernel_samsung_smdk4412-bb6dfb32f90094fea647e1f27d994a8b6ddd2766.tar.bz2
Merge branch 'linus' into x86/gart
Diffstat (limited to 'arch/powerpc/boot/4xx.c')
-rw-r--r--arch/powerpc/boot/4xx.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/arch/powerpc/boot/4xx.c b/arch/powerpc/boot/4xx.c
index 758edf1..5c87843 100644
--- a/arch/powerpc/boot/4xx.c
+++ b/arch/powerpc/boot/4xx.c
@@ -21,6 +21,25 @@
#include "reg.h"
#include "dcr.h"
+static unsigned long chip_11_errata(unsigned long memsize)
+{
+ unsigned long pvr;
+
+ pvr = mfpvr();
+
+ switch (pvr & 0xf0000ff0) {
+ case 0x40000850:
+ case 0x400008d0:
+ case 0x200008d0:
+ memsize -= 4096;
+ break;
+ default:
+ break;
+ }
+
+ return memsize;
+}
+
/* Read the 4xx SDRAM controller to get size of system memory. */
void ibm4xx_sdram_fixup_memsize(void)
{
@@ -34,6 +53,7 @@ void ibm4xx_sdram_fixup_memsize(void)
memsize += SDRAM_CONFIG_BANK_SIZE(bank_config);
}
+ memsize = chip_11_errata(memsize);
dt_fixup_memory(0, memsize);
}
@@ -199,6 +219,7 @@ void ibm4xx_denali_fixup_memsize(void)
bank = 4; /* 4 banks */
memsize = cs * (1 << (col+row)) * bank * dpath;
+ memsize = chip_11_errata(memsize);
dt_fixup_memory(0, memsize);
}