]> pilppa.com Git - linux-2.6-omap-h63xx.git/commitdiff
sh: simplify kexec vbr code
authorMagnus Damm <damm@igel.co.jp>
Wed, 18 Mar 2009 08:47:31 +0000 (08:47 +0000)
committerPaul Mundt <lethal@linux-sh.org>
Wed, 18 Mar 2009 09:44:22 +0000 (18:44 +0900)
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>
arch/sh/kernel/machine_kexec.c
arch/sh/kernel/relocate_kernel.S

index 94df56b0d1f65612d76196ec8ef1bfbb1fb4eeae..d3318f99256b3ae8c8ad32ca5dff773fbb7feb7b 100644 (file)
@@ -23,8 +23,7 @@
 typedef NORET_TYPE void (*relocate_new_kernel_t)(
                                unsigned long indirection_page,
                                unsigned long reboot_code_buffer,
-                               unsigned long start_address,
-                               unsigned long vbr_reg) ATTRIB_NORET;
+                               unsigned long start_address) ATTRIB_NORET;
 
 extern const unsigned char relocate_new_kernel[];
 extern const unsigned int relocate_new_kernel_size;
@@ -76,14 +75,8 @@ void machine_kexec(struct kimage *image)
 
        unsigned long page_list;
        unsigned long reboot_code_buffer;
-       unsigned long vbr_reg;
        relocate_new_kernel_t rnk;
 
-#if defined(CONFIG_SH_STANDARD_BIOS)
-       vbr_reg = ((unsigned long )gdb_vbr_vector) - 0x100;
-#else
-       vbr_reg = 0x80000000;  // dummy
-#endif
        /* Interrupts aren't acceptable while we reboot */
        local_irq_disable();
 
@@ -100,9 +93,15 @@ void machine_kexec(struct kimage *image)
         kexec_info(image);
        flush_cache_all();
 
+       set_bl_bit();
+#if defined(CONFIG_SH_STANDARD_BIOS)
+       asm volatile("ldc %0, vbr" :
+                    : "r" (((unsigned long) gdb_vbr_vector) - 0x100)
+                    : "memory");
+#endif
        /* now call it */
        rnk = (relocate_new_kernel_t) reboot_code_buffer;
-       (*rnk)(page_list, reboot_code_buffer, P2SEGADDR(image->start), vbr_reg);
+       (*rnk)(page_list, reboot_code_buffer, P2SEGADDR(image->start));
 }
 
 void arch_crash_save_vmcoreinfo(void)
index c66cb3209db50ea6d43a38346fdcefe2e1e7dc0c..8b50b2c873a4e38a1269564025c5ae523ed281cb 100644 (file)
@@ -16,7 +16,6 @@ relocate_new_kernel:
        /* r4 = indirection_page   */
        /* r5 = reboot_code_buffer */
        /* r6 = start_address      */
-       /* r7 = vbr_reg            */
 
        mov.l   10f,r8    /* PAGE_SIZE */
        mov.l   11f,r9    /* P2SEG */
@@ -80,9 +79,6 @@ relocate_new_kernel:
        bra     0b
        nop
 6:
-#ifdef CONFIG_SH_STANDARD_BIOS
-       ldc   r7, vbr
-#endif
        jmp @r6
        nop