aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/kernel/relocate_kernel.S
diff options
context:
space:
mode:
authorRichard Purdie <rpurdie@rpsys.net>2008-01-01 18:56:46 -0500
committerRussell King <rmk+kernel@arm.linux.org.uk>2008-02-04 08:21:03 -0500
commit4cd9d6f774c7e0578bbc4409d4490d8f2097d40a (patch)
treec910cfc0def573a681fe8c75e1e35abd93496151 /arch/arm/kernel/relocate_kernel.S
parentae9458d6a0956aa21cb49e1251e35a8d4dacbe6e (diff)
[ARM] 4736/1: Export atags to userspace and allow kexec to use customised atags
Currently, the atags used by kexec are fixed to the ones originally used to boot the kernel. This is less than ideal as changing the commandline, initrd and other options would be a useful feature. This patch exports the atags used for the current kernel to userspace through an "atags" file in procfs. The presence of the file is controlled by its own Kconfig option and cleans up several ifdef blocks into a separate file. The tags for the new kernel are assumed to be at a fixed location before the kernel image itself. The location of the tags used to boot the original kernel is unimportant and no longer saved. Based on a patch from Uli Luckas <u.luckas@road.de> Signed-off-by: Richard Purdie <rpurdie@rpsys.net> Acked-by: Uli Luckas <u.luckas@road.de> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/kernel/relocate_kernel.S')
-rw-r--r--arch/arm/kernel/relocate_kernel.S30
1 files changed, 4 insertions, 26 deletions
diff --git a/arch/arm/kernel/relocate_kernel.S b/arch/arm/kernel/relocate_kernel.S
index 062c111c572..61930eb0902 100644
--- a/arch/arm/kernel/relocate_kernel.S
+++ b/arch/arm/kernel/relocate_kernel.S
@@ -7,23 +7,6 @@
7 .globl relocate_new_kernel 7 .globl relocate_new_kernel
8relocate_new_kernel: 8relocate_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
187:
19 ldr r5,[r1],#4
20 str r5,[r0],#4
21 subs r6,r6,#1
22 bne 7b
23
248:
25 /* Boot params moved, now go on with the kernel */
26
27 ldr r0,kexec_indirection_page 10 ldr r0,kexec_indirection_page
28 ldr r1,kexec_start_address 11 ldr r1,kexec_start_address
29 12
@@ -67,7 +50,7 @@ relocate_new_kernel:
67 mov lr,r1 50 mov lr,r1
68 mov r0,#0 51 mov r0,#0
69 ldr r1,kexec_mach_type 52 ldr r1,kexec_mach_type
70 ldr r2,kexec_boot_params_address 53 ldr r2,kexec_boot_atags
71 mov pc,lr 54 mov pc,lr
72 55
73 .globl kexec_start_address 56 .globl kexec_start_address
@@ -82,14 +65,9 @@ kexec_indirection_page:
82kexec_mach_type: 65kexec_mach_type:
83 .long 0x0 66 .long 0x0
84 67
85 /* phy addr where new kernel will expect to find boot params */ 68 /* phy addr of the atags for the new kernel */
86 .globl kexec_boot_params_address 69 .globl kexec_boot_atags
87kexec_boot_params_address: 70kexec_boot_atags:
88 .long 0x0
89
90 /* phy addr where old kernel put a copy of orig boot params */
91 .globl kexec_boot_params_copy
92kexec_boot_params_copy:
93 .long 0x0 71 .long 0x0
94 72
95relocate_new_kernel_end: 73relocate_new_kernel_end: