I realize this is a very unique situation, but the initrd code breaks with exactly 512M of RAM mapped from 0 to 512M: Determined physical RAM map: memory: 20000000 @ 00000000 (usable) Initial ramdisk at: 0x8023a000 (629389 bytes) initrd extends beyond end of memory (0x802d3a8d > 0x80000000) Here is a little patch - instead of converting the PFN to a physical address it converts the initrd_end to a PFN. Thanks, Jason Index: setup.c =================================================================== RCS file: /cvs/linux/arch/mips/kernel/setup.c,v retrieving revision 1.96 diff -u -r1.96 setup.c --- setup.c 2001/12/02 11:34:38 1.96 +++ setup.c 2002/01/10 08:01:18 @@ -921,7 +928,7 @@ printk("Initial ramdisk at: 0x%p (%lu bytes)\n", (void *)initrd_start, initrd_size); - if ((void *)initrd_end > phys_to_virt(PFN_PHYS(max_low_pfn))) { + if (PFN_UP(__pa(initrd_end)) >= max_low_pfn) { printk("initrd extends beyond end of memory " "(0x%lx > 0x%p)\ndisabling initrd\n", initrd_end,