diff options
Diffstat (limited to 'arch/arm/kernel/relocate_kernel.S')
-rw-r--r-- | arch/arm/kernel/relocate_kernel.S | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/arch/arm/kernel/relocate_kernel.S b/arch/arm/kernel/relocate_kernel.S index 7baadae7cb27..062c111c572f 100644 --- a/arch/arm/kernel/relocate_kernel.S +++ b/arch/arm/kernel/relocate_kernel.S | |||
@@ -7,6 +7,23 @@ | |||
7 | .globl relocate_new_kernel | 7 | .globl relocate_new_kernel |
8 | relocate_new_kernel: | 8 | relocate_new_kernel: |
9 | 9 | ||
10 | /* Move boot params back to where the kernel expects them */ | ||
11 | |||
12 | ldr r0,kexec_boot_params_address | ||
13 | teq r0,#0 | ||
14 | beq 8f | ||
15 | |||
16 | ldr r1,kexec_boot_params_copy | ||
17 | mov r6,#KEXEC_BOOT_PARAMS_SIZE/4 | ||
18 | 7: | ||
19 | ldr r5,[r1],#4 | ||
20 | str r5,[r0],#4 | ||
21 | subs r6,r6,#1 | ||
22 | bne 7b | ||
23 | |||
24 | 8: | ||
25 | /* Boot params moved, now go on with the kernel */ | ||
26 | |||
10 | ldr r0,kexec_indirection_page | 27 | ldr r0,kexec_indirection_page |
11 | ldr r1,kexec_start_address | 28 | ldr r1,kexec_start_address |
12 | 29 | ||
@@ -50,7 +67,7 @@ relocate_new_kernel: | |||
50 | mov lr,r1 | 67 | mov lr,r1 |
51 | mov r0,#0 | 68 | mov r0,#0 |
52 | ldr r1,kexec_mach_type | 69 | ldr r1,kexec_mach_type |
53 | mov r2,#0 | 70 | ldr r2,kexec_boot_params_address |
54 | mov pc,lr | 71 | mov pc,lr |
55 | 72 | ||
56 | .globl kexec_start_address | 73 | .globl kexec_start_address |
@@ -65,6 +82,16 @@ kexec_indirection_page: | |||
65 | kexec_mach_type: | 82 | kexec_mach_type: |
66 | .long 0x0 | 83 | .long 0x0 |
67 | 84 | ||
85 | /* phy addr where new kernel will expect to find boot params */ | ||
86 | .globl kexec_boot_params_address | ||
87 | kexec_boot_params_address: | ||
88 | .long 0x0 | ||
89 | |||
90 | /* phy addr where old kernel put a copy of orig boot params */ | ||
91 | .globl kexec_boot_params_copy | ||
92 | kexec_boot_params_copy: | ||
93 | .long 0x0 | ||
94 | |||
68 | relocate_new_kernel_end: | 95 | relocate_new_kernel_end: |
69 | 96 | ||
70 | .globl relocate_new_kernel_size | 97 | .globl relocate_new_kernel_size |