diff options
Diffstat (limited to 'arch/sh/kernel/machine_kexec.c')
-rw-r--r-- | arch/sh/kernel/machine_kexec.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/arch/sh/kernel/machine_kexec.c b/arch/sh/kernel/machine_kexec.c index 94df56b0d1f6..d3318f99256b 100644 --- a/arch/sh/kernel/machine_kexec.c +++ b/arch/sh/kernel/machine_kexec.c | |||
@@ -23,8 +23,7 @@ | |||
23 | typedef NORET_TYPE void (*relocate_new_kernel_t)( | 23 | typedef NORET_TYPE void (*relocate_new_kernel_t)( |
24 | unsigned long indirection_page, | 24 | unsigned long indirection_page, |
25 | unsigned long reboot_code_buffer, | 25 | unsigned long reboot_code_buffer, |
26 | unsigned long start_address, | 26 | unsigned long start_address) ATTRIB_NORET; |
27 | unsigned long vbr_reg) ATTRIB_NORET; | ||
28 | 27 | ||
29 | extern const unsigned char relocate_new_kernel[]; | 28 | extern const unsigned char relocate_new_kernel[]; |
30 | extern const unsigned int relocate_new_kernel_size; | 29 | extern const unsigned int relocate_new_kernel_size; |
@@ -76,14 +75,8 @@ void machine_kexec(struct kimage *image) | |||
76 | 75 | ||
77 | unsigned long page_list; | 76 | unsigned long page_list; |
78 | unsigned long reboot_code_buffer; | 77 | unsigned long reboot_code_buffer; |
79 | unsigned long vbr_reg; | ||
80 | relocate_new_kernel_t rnk; | 78 | relocate_new_kernel_t rnk; |
81 | 79 | ||
82 | #if defined(CONFIG_SH_STANDARD_BIOS) | ||
83 | vbr_reg = ((unsigned long )gdb_vbr_vector) - 0x100; | ||
84 | #else | ||
85 | vbr_reg = 0x80000000; // dummy | ||
86 | #endif | ||
87 | /* Interrupts aren't acceptable while we reboot */ | 80 | /* Interrupts aren't acceptable while we reboot */ |
88 | local_irq_disable(); | 81 | local_irq_disable(); |
89 | 82 | ||
@@ -100,9 +93,15 @@ void machine_kexec(struct kimage *image) | |||
100 | kexec_info(image); | 93 | kexec_info(image); |
101 | flush_cache_all(); | 94 | flush_cache_all(); |
102 | 95 | ||
96 | set_bl_bit(); | ||
97 | #if defined(CONFIG_SH_STANDARD_BIOS) | ||
98 | asm volatile("ldc %0, vbr" : | ||
99 | : "r" (((unsigned long) gdb_vbr_vector) - 0x100) | ||
100 | : "memory"); | ||
101 | #endif | ||
103 | /* now call it */ | 102 | /* now call it */ |
104 | rnk = (relocate_new_kernel_t) reboot_code_buffer; | 103 | rnk = (relocate_new_kernel_t) reboot_code_buffer; |
105 | (*rnk)(page_list, reboot_code_buffer, P2SEGADDR(image->start), vbr_reg); | 104 | (*rnk)(page_list, reboot_code_buffer, P2SEGADDR(image->start)); |
106 | } | 105 | } |
107 | 106 | ||
108 | void arch_crash_save_vmcoreinfo(void) | 107 | void arch_crash_save_vmcoreinfo(void) |