watchdog: Fix rounding bug in get_sample_period()
[linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git] / arch / arm / kernel / relocate_kernel.S
blob9cf4cbf8f95b8ca9eef1baf1d8f49054999304f8
1 /*
2  * relocate_kernel.S - put the kernel image in place to boot
3  */
5 #include <asm/kexec.h>
7         .globl relocate_new_kernel
8 relocate_new_kernel:
10         ldr     r0,kexec_indirection_page
11         ldr     r1,kexec_start_address
13         /*
14          * If there is no indirection page (we are doing crashdumps)
15          * skip any relocation.
16          */
17         cmp     r0, #0
18         beq     2f
20 0:      /* top, read another word for the indirection page */
21         ldr     r3, [r0],#4
23         /* Is it a destination page. Put destination address to r4 */
24         tst     r3,#1,0
25         beq     1f
26         bic     r4,r3,#1
27         b       0b
29         /* Is it an indirection page */
30         tst     r3,#2,0
31         beq     1f
32         bic     r0,r3,#2
33         b       0b
36         /* are we done ? */
37         tst     r3,#4,0
38         beq     1f
39         b       2f
42         /* is it source ? */
43         tst     r3,#8,0
44         beq     0b
45         bic r3,r3,#8
46         mov r6,#1024
48         ldr r5,[r3],#4
49         str r5,[r4],#4
50         subs r6,r6,#1
51         bne 9b
52         b 0b
55         /* Jump to relocated kernel */
56         mov lr,r1
57         mov r0,#0
58         ldr r1,kexec_mach_type
59         ldr r2,kexec_boot_atags
60         mov pc,lr
62         .align
64         .globl kexec_start_address
65 kexec_start_address:
66         .long   0x0
68         .globl kexec_indirection_page
69 kexec_indirection_page:
70         .long   0x0
72         .globl kexec_mach_type
73 kexec_mach_type:
74         .long   0x0
76         /* phy addr of the atags for the new kernel */
77         .globl kexec_boot_atags
78 kexec_boot_atags:
79         .long   0x0
81 relocate_new_kernel_end:
83         .globl relocate_new_kernel_size
84 relocate_new_kernel_size:
85         .long relocate_new_kernel_end - relocate_new_kernel