mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-31 14:04:26 -04:00 
			
		
		
		
	It is based on patches from the linux-longsoon-community git tree: http://dev.lemote.com/cgit/linux-loongson-community.git/ Now the kernel can use the command line parameter from kexec-tools. Runtime tested on ar71xx with 2.6.39.4 (the wathdog must be stopped before executing the new kernel). Compile tested with lantiq (3.1.4) and brcm47xx (3.0.12). SVN-Revision: 29674
		
			
				
	
	
		
			53 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From 49d07a29653b1f2c6ae273b3d8fe93d981f43004 Mon Sep 17 00:00:00 2001
 | |
| From: Wu Zhangjin <wuzhangjin@gmail.com>
 | |
| Date: Wed, 12 Jan 2011 20:59:32 +0000
 | |
| Subject: MIPS: Kexec: Init the arguments for the new kernel image
 | |
| 
 | |
| Whenever the kexec-tools pass the command lines to the new kernel image,
 | |
| init the arguments as the ones for the 1st kernel image. This fixed the
 | |
| booting failure of Kexec on YeeLoong.
 | |
| 
 | |
| Signed-off-by: Wu Zhangjin <wuzhangjin@gmail.com>
 | |
| ---
 | |
| --- a/arch/mips/kernel/machine_kexec.c
 | |
| +++ b/arch/mips/kernel/machine_kexec.c
 | |
| @@ -10,6 +10,7 @@
 | |
|  #include <linux/mm.h>
 | |
|  #include <linux/delay.h>
 | |
|  
 | |
| +#include <asm/bootinfo.h>
 | |
|  #include <asm/cacheflush.h>
 | |
|  #include <asm/page.h>
 | |
|  
 | |
| @@ -21,9 +22,30 @@ void (*relocated_kexec_smp_wait) (void *
 | |
|  atomic_t kexec_ready_to_reboot = ATOMIC_INIT(0);
 | |
|  #endif
 | |
|  
 | |
| +static void machine_kexec_init_args(void)
 | |
| +{
 | |
| +	kexec_args[0] = fw_arg0;
 | |
| +	kexec_args[1] = fw_arg1;
 | |
| +	kexec_args[2] = fw_arg2;
 | |
| +	kexec_args[3] = fw_arg3;
 | |
| +
 | |
| +	pr_info("kexec_args[0] (argc): %lu\n", kexec_args[0]);
 | |
| +	pr_info("kexec_args[1] (argv): %p\n", (void *)kexec_args[1]);
 | |
| +	pr_info("kexec_args[2] (env ): %p\n", (void *)kexec_args[2]);
 | |
| +	pr_info("kexec_args[3] (desc): %p\n", (void *)kexec_args[3]);
 | |
| +}
 | |
| +
 | |
|  int
 | |
|  machine_kexec_prepare(struct kimage *kimage)
 | |
|  {
 | |
| +	/*
 | |
| +	 * Whenever arguments passed from kexec-tools, Init the arguments as
 | |
| +	 * the original ones to avoid booting failure.
 | |
| +	 *
 | |
| +	 * This can be overrided by _machine_kexec_prepare().
 | |
| +	 */
 | |
| +	machine_kexec_init_args();
 | |
| +
 | |
|  	if (_machine_kexec_prepare)
 | |
|  		return _machine_kexec_prepare(kimage);
 | |
|  	return 0;
 |