diff options
| author | Magnus Damm <damm@igel.co.jp> | 2009-03-18 04:47:31 -0400 |
|---|---|---|
| committer | Paul Mundt <lethal@linux-sh.org> | 2009-03-18 05:44:22 -0400 |
| commit | 7be5c55af0cc58e54e42e1702d837527e15b8414 (patch) | |
| tree | 87d6ecab0ff11b0b75053bf57ee462a99828f981 | |
| parent | c20351846efcb755ba849d9fb701fbd9a1ffb7c2 (diff) | |
sh: simplify kexec vbr code
Setup the vbr register in machine_kexec(). This
instead of passing values to the assembly snippet.
Signed-off-by: Magnus Damm <damm@igel.co.jp>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
| -rw-r--r-- | arch/sh/kernel/machine_kexec.c | 17 | ||||
| -rw-r--r-- | arch/sh/kernel/relocate_kernel.S | 4 |
2 files changed, 8 insertions, 13 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) |
diff --git a/arch/sh/kernel/relocate_kernel.S b/arch/sh/kernel/relocate_kernel.S index c66cb3209db5..8b50b2c873a4 100644 --- a/arch/sh/kernel/relocate_kernel.S +++ b/arch/sh/kernel/relocate_kernel.S | |||
| @@ -16,7 +16,6 @@ relocate_new_kernel: | |||
| 16 | /* r4 = indirection_page */ | 16 | /* r4 = indirection_page */ |
| 17 | /* r5 = reboot_code_buffer */ | 17 | /* r5 = reboot_code_buffer */ |
| 18 | /* r6 = start_address */ | 18 | /* r6 = start_address */ |
| 19 | /* r7 = vbr_reg */ | ||
| 20 | 19 | ||
| 21 | mov.l 10f,r8 /* PAGE_SIZE */ | 20 | mov.l 10f,r8 /* PAGE_SIZE */ |
| 22 | mov.l 11f,r9 /* P2SEG */ | 21 | mov.l 11f,r9 /* P2SEG */ |
| @@ -80,9 +79,6 @@ relocate_new_kernel: | |||
| 80 | bra 0b | 79 | bra 0b |
| 81 | nop | 80 | nop |
| 82 | 6: | 81 | 6: |
| 83 | #ifdef CONFIG_SH_STANDARD_BIOS | ||
| 84 | ldc r7, vbr | ||
| 85 | #endif | ||
| 86 | jmp @r6 | 82 | jmp @r6 |
| 87 | nop | 83 | nop |
| 88 | 84 | ||
