• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/arch/arm/kernel/
1/*
2 * relocate_kernel.S - put the kernel image in place to boot
3 */
4
5#include <asm/kexec.h>
6
7	.globl relocate_new_kernel
8relocate_new_kernel:
9
10	ldr	r0,kexec_indirection_page
11	ldr	r1,kexec_start_address
12
13	/*
14	 * If there is no indirection page (we are doing crashdumps)
15	 * skip any relocation.
16	 */
17	cmp	r0, #0
18	beq	2f
19
200:	/* top, read another word for the indirection page */
21	ldr	r3, [r0],#4
22
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
281:
29	/* Is it an indirection page */
30	tst	r3,#2,0
31	beq	1f
32	bic	r0,r3,#2
33	b	0b
341:
35
36	/* are we done ? */
37	tst	r3,#4,0
38	beq	1f
39	b	2f
40
411:
42	/* is it source ? */
43	tst	r3,#8,0
44	beq	0b
45	bic r3,r3,#8
46	mov r6,#1024
479:
48	ldr r5,[r3],#4
49	str r5,[r4],#4
50	subs r6,r6,#1
51	bne 9b
52	b 0b
53
542:
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
61
62	.globl kexec_start_address
63kexec_start_address:
64	.long	0x0
65
66	.globl kexec_indirection_page
67kexec_indirection_page:
68	.long	0x0
69
70	.globl kexec_mach_type
71kexec_mach_type:
72	.long	0x0
73
74	/* phy addr of the atags for the new kernel */
75	.globl kexec_boot_atags
76kexec_boot_atags:
77	.long	0x0
78
79relocate_new_kernel_end:
80
81	.globl relocate_new_kernel_size
82relocate_new_kernel_size:
83	.long relocate_new_kernel_end - relocate_new_kernel
84