[PATCH] PPC64: Don't try to claim memory from OF at 1GB mark

Olof Johansson olof at lixom.net
Wed Aug 10 13:20:01 EST 2005


Hi,

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 at lixom.net>


Index: 2.6/arch/ppc64/kernel/prom_init.c
===================================================================
--- 2.6.orig/arch/ppc64/kernel/prom_init.c	2005-08-09 03:16:09.000000000 -0500
+++ 2.6/arch/ppc64/kernel/prom_init.c	2005-08-09 18:16:18.000000000 -0500
@@ -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));



More information about the Linuxppc64-dev mailing list