[ar71xx] wrt400n: lan ports don't need the ar8216 workaround
[openwrt-10.03/.git] / target / linux / brcm47xx / patches-2.6.31 / 170-128MB_ram_bugfix.patch
1 --- a/arch/mips/bcm47xx/prom.c
2 +++ b/arch/mips/bcm47xx/prom.c
3 @@ -126,6 +126,7 @@ static __init void prom_init_cmdline(voi
4  static __init void prom_init_mem(void)
5  {
6         unsigned long mem;
7 +       unsigned long max;
8  
9         /* Figure out memory size by finding aliases.
10          *
11 @@ -134,8 +135,21 @@ static __init void prom_init_mem(void)
12          * want to reuse the memory used by CFE (around 4MB). That means cfe_*
13          * functions stop to work at some point during the boot, we should only
14          * call them at the beginning of the boot.
15 +        * 
16 +        * BCM47XX uses 128MB for addressing the ram, if the system contains
17 +        * less that that amount of ram it remaps the ram more often into the
18 +        * available space.
19 +        * Accessing memory after 128MB will cause an exception.
20 +        * max contains the biggest possible address supported by the platform.
21 +        * If the method wants to try something above we assume 128MB ram.
22          */
23 +       max = ((unsigned long)(prom_init) | ((128 << 20) - 1));
24         for (mem = (1 << 20); mem < (128 << 20); mem += (1 << 20)) {
25 +               if (((unsigned long)(prom_init) + mem) > max) {
26 +                       mem = (128 << 20);
27 +                       printk("assume 128MB RAM\n");
28 +                       break;
29 +               }
30                 if (*(unsigned long *)((unsigned long)(prom_init) + mem) ==
31                     *(unsigned long *)(prom_init))
32                         break;