From 8cbc42e7e42f8b22115f06de9a50e727f5092eaa Mon Sep 17 00:00:00 2001 From: Guido Günther Date: Sat, 16 Feb 2008 14:59:27 +0100 Subject: apply an IP22 tftploader hack so the kernel+d-i initrd fit into the reserved space http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=452798 Tip22 finds this memory map on IP22: 1) Free Memory(3) segment found at (0x88002000,0x88740000) 2) Free Memory(3) segment found at (0x88800000,0x89002000) 3) Free Memory(3) segment found at (0x896f2000,0x94000000) (1) is where the running kernel + initrd goes. (2) is where we tell the prom to download the tftpboot image to and (3) is lots of free space. The 64bit kernel (7MB) is just so much bigger than the 32bit one. This hack puts the tftp boot file into (3) and the initrd into (2) - it succesfully boots a kernel with an initramfs on my R5K Indy. I'll have to change some of the reservation code so we don't waste so much ram before I can fix this for real though. --- common/subarch.h | 2 +- tip22/tftpload.c | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/common/subarch.h b/common/subarch.h index eba5ef0..788cc8d 100644 --- a/common/subarch.h +++ b/common/subarch.h @@ -30,7 +30,7 @@ struct kernel_load_block { struct kernel_load_block kernel_load[] = { { /* IP22 */ .base = 0x88002000, - .reserved = 0x800000, + .reserved = 0x1700000, }, { /* IP32 */ .base = 0x80004000, diff --git a/tip22/tftpload.c b/tip22/tftpload.c index 86bf111..37ca7d1 100644 --- a/tip22/tftpload.c +++ b/tip22/tftpload.c @@ -320,7 +320,12 @@ void _start(LONG argc, CHAR * argv[], CHAR * envp[]) kernel_entry = (void (*)(int, CHAR *[], CHAR *[]))CopyKernel(&kernel_end); /* align to page boundary */ +#if (SUBARCH != IP22) rd_vaddr = (char*)(((kernel_end + PAGE_SIZE) / PAGE_SIZE ) * PAGE_SIZE); +#else + rd_vaddr = (char*)0x88800000; +#endif + copyRamdisk( rd_vaddr, (char*)&__rd_start, rd_size); /* tell the kernel about the ramdisk */ -- cgit v1.2.3