aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/boot/4xx.c
diff options
context:
space:
mode:
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 758edf1c5815..5c878436f348 100644
--- a/arch/powerpc/boot/4xx.c
+++ b/arch/powerpc/boot/4xx.c
@@ -21,6 +21,25 @@
21#include "reg.h" 21#include "reg.h"
22#include "dcr.h" 22#include "dcr.h"
23 23
24static unsigned long chip_11_errata(unsigned long memsize)
25{
26 unsigned long pvr;
27
28 pvr = mfpvr();
29
30 switch (pvr & 0xf0000ff0) {
31 case 0x40000850:
32 case 0x400008d0:
33 case 0x200008d0:
34 memsize -= 4096;
35 break;
36 default:
37 break;
38 }
39
40 return memsize;
41}
42
24/* Read the 4xx SDRAM controller to get size of system memory. */ 43/* Read the 4xx SDRAM controller to get size of system memory. */
25void ibm4xx_sdram_fixup_memsize(void) 44void ibm4xx_sdram_fixup_memsize(void)
26{ 45{
@@ -34,6 +53,7 @@ void ibm4xx_sdram_fixup_memsize(void)
34 memsize += SDRAM_CONFIG_BANK_SIZE(bank_config); 53 memsize += SDRAM_CONFIG_BANK_SIZE(bank_config);
35 } 54 }
36 55
56 memsize = chip_11_errata(memsize);
37 dt_fixup_memory(0, memsize); 57 dt_fixup_memory(0, memsize);
38} 58}
39 59
@@ -199,6 +219,7 @@ void ibm4xx_denali_fixup_memsize(void)
199 bank = 4; /* 4 banks */ 219 bank = 4; /* 4 banks */
200 220
201 memsize = cs * (1 << (col+row)) * bank * dpath; 221 memsize = cs * (1 << (col+row)) * bank * dpath;
222 memsize = chip_11_errata(memsize);
202 dt_fixup_memory(0, memsize); 223 dt_fixup_memory(0, memsize);
203} 224}
204 225