[OpenBIOS] r349 - openbios-devel/arch/ppc/qemu

svn at openbios.org svn at openbios.org
Sun Jan 4 20:25:42 CET 2009


Author: blueswirl
Date: 2009-01-04 20:25:41 +0100 (Sun, 04 Jan 2009)
New Revision: 349

Modified:
   openbios-devel/arch/ppc/qemu/kernel.h
   openbios-devel/arch/ppc/qemu/main.c
   openbios-devel/arch/ppc/qemu/start.S
Log:
Pass initrd parameters to preloaded Linux kernel like Yaboot does

Modified: openbios-devel/arch/ppc/qemu/kernel.h
===================================================================
--- openbios-devel/arch/ppc/qemu/kernel.h	2009-01-04 16:01:50 UTC (rev 348)
+++ openbios-devel/arch/ppc/qemu/kernel.h	2009-01-04 19:25:41 UTC (rev 349)
@@ -22,7 +22,7 @@
 /* start.S */
 extern void 		flush_icache_range( char *start, char *stop );
 extern char		of_rtas_start[], of_rtas_end[];
-extern void             call_elf( ulong elf_entry );
+extern void             call_elf( ulong arg1, ulong arg2, ulong elf_entry );
 
 /* methods.c */
 extern void		node_methods_init( const char *cpuname );

Modified: openbios-devel/arch/ppc/qemu/main.c
===================================================================
--- openbios-devel/arch/ppc/qemu/main.c	2009-01-04 16:01:50 UTC (rev 348)
+++ openbios-devel/arch/ppc/qemu/main.c	2009-01-04 19:25:41 UTC (rev 349)
@@ -41,7 +41,7 @@
 transfer_control_to_elf( ulong elf_entry )
 {
 	ELF_DPRINTF("Starting ELF boot loader\n");
-        call_elf( elf_entry );
+        call_elf( 0, 0, elf_entry );
 
 	fatal_error("call_elf returned unexpectedly\n");
 }
@@ -302,9 +302,10 @@
         cmdline = nvram_read_be32(0x40);
         initrd_image = nvram_read_be32(0x48);
         initrd_size = nvram_read_be32(0x4c);
-        printk("[ppc] Kernel already loaded (0x%8.8lx + 0x%8.8lx)\n",
-               kernel_image, kernel_size);
-        call_elf(kernel_image);
+        printk("[ppc] Kernel already loaded (0x%8.8lx + 0x%8.8lx) "
+               "(initrd 0x%8.8lx + 0x%8.8lx)\n",
+               kernel_image, kernel_size, initrd_image, initrd_size);
+        call_elf(initrd_image, initrd_size, kernel_image);
     }
 }
 

Modified: openbios-devel/arch/ppc/qemu/start.S
===================================================================
--- openbios-devel/arch/ppc/qemu/start.S	2009-01-04 16:01:50 UTC (rev 348)
+++ openbios-devel/arch/ppc/qemu/start.S	2009-01-04 19:25:41 UTC (rev 349)
@@ -243,17 +243,19 @@
 	 *	r5 = clint interface handler
 	 *	r6 = address of client program arguments (unused)
 	 *	r7 = length of client program arguments (unsed)
+         *
+         *      Yaboot and Linux use r3 and r4 for initrd address and size
 	 */
         .data
 saved_stack:
 	.long	0
         .previous
-	/* void call_elf( entry ) */
+	/* void call_elf( arg1, arg2, entry ) */
 GLOBL(call_elf):
 	mflr	r0
 	stwu	r1,-16(r1)
 	stw	r0,20(r1)
-	mtlr	r3
+	mtlr	r5
 	lis	r8,HA(saved_stack)
 	addi	r8,r8,LO(saved_stack)		// save our stack pointer
 	stw	r1,0(r8)




More information about the OpenBIOS mailing list