5507dde64d21fb6dd33feb42e12b992620c5f6e3
[openwrt.git] / target / linux / generic / patches-3.3 / 332-mips-kexec-init-the-arguments-for-the-new-kernel-image.patch
1 From 49d07a29653b1f2c6ae273b3d8fe93d981f43004 Mon Sep 17 00:00:00 2001
2 From: Wu Zhangjin <wuzhangjin@gmail.com>
3 Date: Wed, 12 Jan 2011 20:59:32 +0000
4 Subject: MIPS: Kexec: Init the arguments for the new kernel image
5
6 Whenever the kexec-tools pass the command lines to the new kernel image,
7 init the arguments as the ones for the 1st kernel image. This fixed the
8 booting failure of Kexec on YeeLoong.
9
10 Signed-off-by: Wu Zhangjin <wuzhangjin@gmail.com>
11 ---
12 --- a/arch/mips/kernel/machine_kexec.c
13 +++ b/arch/mips/kernel/machine_kexec.c
14 @@ -10,6 +10,7 @@
15  #include <linux/mm.h>
16  #include <linux/delay.h>
17  
18 +#include <asm/bootinfo.h>
19  #include <asm/cacheflush.h>
20  #include <asm/page.h>
21  
22 @@ -21,9 +22,30 @@ void (*relocated_kexec_smp_wait) (void *
23  atomic_t kexec_ready_to_reboot = ATOMIC_INIT(0);
24  #endif
25  
26 +static void machine_kexec_init_args(void)
27 +{
28 +       kexec_args[0] = fw_arg0;
29 +       kexec_args[1] = fw_arg1;
30 +       kexec_args[2] = fw_arg2;
31 +       kexec_args[3] = fw_arg3;
32 +
33 +       pr_info("kexec_args[0] (argc): %lu\n", kexec_args[0]);
34 +       pr_info("kexec_args[1] (argv): %p\n", (void *)kexec_args[1]);
35 +       pr_info("kexec_args[2] (env ): %p\n", (void *)kexec_args[2]);
36 +       pr_info("kexec_args[3] (desc): %p\n", (void *)kexec_args[3]);
37 +}
38 +
39  int
40  machine_kexec_prepare(struct kimage *kimage)
41  {
42 +       /*
43 +        * Whenever arguments passed from kexec-tools, Init the arguments as
44 +        * the original ones to avoid booting failure.
45 +        *
46 +        * This can be overrided by _machine_kexec_prepare().
47 +        */
48 +       machine_kexec_init_args();
49 +
50         if (_machine_kexec_prepare)
51                 return _machine_kexec_prepare(kimage);
52         return 0;