aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sh/kernel/machine_kexec.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/sh/kernel/machine_kexec.c')
-rw-r--r--arch/sh/kernel/machine_kexec.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/arch/sh/kernel/machine_kexec.c b/arch/sh/kernel/machine_kexec.c
index cc7c29b0dc8d..7ea2704ea033 100644
--- a/arch/sh/kernel/machine_kexec.c
+++ b/arch/sh/kernel/machine_kexec.c
@@ -46,6 +46,12 @@ void machine_crash_shutdown(struct pt_regs *regs)
46 */ 46 */
47int machine_kexec_prepare(struct kimage *image) 47int machine_kexec_prepare(struct kimage *image)
48{ 48{
49 /* older versions of kexec-tools are passing
50 * the zImage entry point as a virtual address.
51 */
52 if (image->start != PHYSADDR(image->start))
53 return -EINVAL; /* upgrade your kexec-tools */
54
49 return 0; 55 return 0;
50} 56}
51 57
@@ -125,7 +131,8 @@ void machine_kexec(struct kimage *image)
125 131
126 /* now call it */ 132 /* now call it */
127 rnk = (relocate_new_kernel_t) reboot_code_buffer; 133 rnk = (relocate_new_kernel_t) reboot_code_buffer;
128 (*rnk)(page_list, reboot_code_buffer, image->start); 134 (*rnk)(page_list, reboot_code_buffer,
135 (unsigned long)phys_to_virt(image->start));
129 136
130#ifdef CONFIG_KEXEC_JUMP 137#ifdef CONFIG_KEXEC_JUMP
131 asm volatile("ldc %0, vbr" : : "r" (&vbr_base) : "memory"); 138 asm volatile("ldc %0, vbr" : : "r" (&vbr_base) : "memory");