aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/generic/patches-2.6.39/332-mips-kexec-init-the-arguments-for-the-new-kernel-image.patch
diff options
context:
space:
mode:
authorGabor Juhos <juhosg@openwrt.org>2012-01-07 16:29:16 +0000
committerGabor Juhos <juhosg@openwrt.org>2012-01-07 16:29:16 +0000
commit6c74274c8d2eec1e92e338ef197ffe210cc5b52d (patch)
tree32eae6f867dc07acf9c3eae6c4546975cd58d7a5 /target/linux/generic/patches-2.6.39/332-mips-kexec-init-the-arguments-for-the-new-kernel-image.patch
parentf638c6207bde72a7795f44afefbbca76ac901e0a (diff)
downloadupstream-6c74274c8d2eec1e92e338ef197ffe210cc5b52d.tar.gz
upstream-6c74274c8d2eec1e92e338ef197ffe210cc5b52d.tar.bz2
upstream-6c74274c8d2eec1e92e338ef197ffe210cc5b52d.zip
generic: improve MIPS kexec support
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
Diffstat (limited to 'target/linux/generic/patches-2.6.39/332-mips-kexec-init-the-arguments-for-the-new-kernel-image.patch')
-rw-r--r--target/linux/generic/patches-2.6.39/332-mips-kexec-init-the-arguments-for-the-new-kernel-image.patch52
1 files changed, 52 insertions, 0 deletions
diff --git a/target/linux/generic/patches-2.6.39/332-mips-kexec-init-the-arguments-for-the-new-kernel-image.patch b/target/linux/generic/patches-2.6.39/332-mips-kexec-init-the-arguments-for-the-new-kernel-image.patch
new file mode 100644
index 0000000000..5507dde64d
--- /dev/null
+++ b/target/linux/generic/patches-2.6.39/332-mips-kexec-init-the-arguments-for-the-new-kernel-image.patch
@@ -0,0 +1,52 @@
+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;