[PATCH] PPC64: Don't try to claim memory from OF at 1GB mark
authorOlof Johansson <olof@lixom.net>
Mon, 29 Aug 2005 02:42:10 +0000 (21:42 -0500)
committerPaul Mackerras <paulus@samba.org>
Tue, 30 Aug 2005 03:32:08 +0000 (13:32 +1000)
Some RS64-based machines (p620, F80, others) have problems with firmware
returning 0xdeadbeef instead of failure to allocations that end at the
1GB mark.

We have two options:
1. Detect the undocumented 0xdeadbeef return value and interpret it as
a failure.
2. Avoid allocating that high.

(2) is really the cleaner solution here. 768MB is plenty of room so use
that as the max alloc_top instead of 1GB.

Signed-off-by: Olof Johansson <olof@lixom.net>
Signed-off-by: Paul Mackerras <paulus@samba.org>
arch/ppc64/kernel/prom_init.c

index adcf972711fc1c8a24d81279173c0fa1823ee064..122283a1d39a79d2cb988b51128bec5e582cccdd 100644 (file)
@@ -892,7 +892,10 @@ static void __init prom_init_mem(void)
        if ( RELOC(of_platform) == PLATFORM_PSERIES_LPAR )
                RELOC(alloc_top) = RELOC(rmo_top);
        else
-               RELOC(alloc_top) = RELOC(rmo_top) = min(0x40000000ul, RELOC(ram_top));
+               /* Some RS64 machines have buggy firmware where claims up at 1GB
+                * fails. Cap at 768MB as a workaround. Still plenty of room.
+                */
+               RELOC(alloc_top) = RELOC(rmo_top) = min(0x30000000ul, RELOC(ram_top));
 
        prom_printf("memory layout at init:\n");
        prom_printf("  memory_limit : %x (16 MB aligned)\n", RELOC(prom_memory_limit));