OpenCores
URL https://opencores.org/ocsvn/or1k_old/or1k_old/trunk

Subversion Repositories or1k_old

[/] [or1k_old/] [trunk/] [rc203soc/] [sw/] [uClinux/] [arch/] [armnommu/] [boot/] [compressed/] [head.S] - Blame information for rev 1765

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1622 jcastillo
/*
2
 * linux/arch/arm/boot/compressed/head.S
3
 *
4
 * Copyright (C) 1996 Russell King
5
 */
6
                .text
7
/*
8
 * sort out different calling conventions
9
 */
10
start:          teq     r0, #0
11
                beq     newparams
12
                mov     r4, #0x02000000
13
                add     r4, r4, #0x7C000
14
                mov     r3, #0x4000
15
                sub     r3, r3, #4
16
1:              ldmia   r0!, {r5 - r12}
17
                stmia   r4!, {r5 - r12}
18
                subs    r3, r3, #32
19
                bpl     1b
20
newparams:      adr     r2, LC0
21
                ldmia   r2, {r2, r3, r4, r5, r6, sp}
22
                adr     r7, start
23
                sub     r6, r7, r6
24
/*
25
 * Relocate pointers
26
 */
27
                add     r2, r2, r6
28
                add     r3, r3, r6
29
                add     r5, r5, r6
30
                add     sp, sp, r6
31
/*
32
 * Clear zero-init
33
 */
34
                mov     r6, #0
35
1:              str     r6, [r2], #4
36
                cmp     r2, r3
37
                blt     1b
38
                str     r1, [r5]                @ save architecture
39
/*
40
 * Uncompress the kernel
41
 */
42
                mov     r1, #0x8000
43
                add     r2, r2, r1, lsl #1      @ Add 64k for malloc
44
                sub     r1, r1, #1
45
                add     r2, r2, r1
46
                bic     r5, r2, r1              @ decompress kernel to after end of the compressed
47
                mov     r0, r5
48
                bl      _decompress_kernel
49
                add     r0, r0, #7
50
                bic     r2, r0, #7
51
/*
52
 * Now move the kernel to the correct location (r5 -> r4, len r0)
53
 */
54
                mov     r0, r4                  @ r0 = start of real kernel
55
                mov     r1, r5                  @ r1 = start of kernel image
56
                add     r3, r5, r2              @ r3 = end of kernel
57
                adr     r4, movecode
58
                adr     r5, movecodeend
59
1:              ldmia   r4!, {r6 - r12, lr}
60
                stmia   r3!, {r6 - r12, lr}
61
                cmp     r4, r5
62
                blt     1b
63
                mrc     p15, 0, r5, c0, c0
64
                eor     r5, r5, #0x44 << 24
65
                eor     r5, r5, #0x01 << 16
66
                eor     r5, r5, #0xa1 << 8
67
                movs    r5, r5, lsr #4
68
                mov     r5, #0
69
                mcreq   p15, 0, r5, c7, c5, 0   @ flush I cache
70
                ldr     r5, LC0 + 12            @ get architecture
71
                ldr     r5, [r5]
72
                add     pc, r1, r2              @ Call move code
73
 
74
/*
75
 * r0 = length, r1 = to, r2 = from
76
 */
77
movecode:       add     r3, r1, r2
78
                mov     r4, r0
79
1:              ldmia   r1!, {r6 - r12, lr}
80
                stmia   r0!, {r6 - r12, lr}
81
                cmp     r1, r3
82
                blt     1b
83
                mrc     p15, 0, r0, c0, c0
84
                eor     r0, r0, #0x44 << 24
85
                eor     r0, r0, #0x01 << 16
86
                eor     r0, r0, #0xa1 << 8
87
                movs    r0, r0, lsr #4
88
                mov     r0, #0
89
                mcreq   p15, 0, r0, c7, c5, 0   @ flush I cache
90
                mov     r1, r5                  @ call kernel correctly
91
                add     pc, r4, #0x20           @ call via EXEC entry
92
 
93
movecodeend:
94
LC0:            .word   __edata
95
                .word   __end
96
                .word   LOADADDR
97
                .word   _architecture
98
                .word   start
99
                .word   _user_stack+4096
100
 
101
                .bss
102
_architecture:  .word   0

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.