123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- #include <linux/linkage.h>
- #include <asm/cache.h>
- .text
- .set noat
- ENTRY(_start)
- wrctl status, r0
-
- movia r1, NIOS2_ICACHE_SIZE
- movui r2, NIOS2_ICACHE_LINE_SIZE
- 1: initi r1
- sub r1, r1, r2
- bgt r1, r0, 1b
-
- movia r1, NIOS2_DCACHE_SIZE
- movui r2, NIOS2_DCACHE_LINE_SIZE
- 1: initd 0(r1)
- sub r1, r1, r2
- bgt r1, r0, 1b
- nextpc r1
- chkadr:
- movia r2, chkadr
- beq r1, r2, finish_move
-
- addi r1, r1, (_start - chkadr)
- movia r2, _start
- movia r3, __bss_start
- 1: ldw r8, 0(r1)
- stw r8, 0(r2)
- addi r1, r1, 4
- addi r2, r2, 4
- blt r2, r3, 1b
-
- movia r1, NIOS2_DCACHE_SIZE
- movui r2, NIOS2_DCACHE_LINE_SIZE
- 1: flushd 0(r1)
- sub r1, r1, r2
- bgt r1, r0, 1b
- movia r1, finish_move
- jmp r1
- finish_move:
-
- movia r2, __bss_start
- movia r1, _end
- 1: stb r0, 0(r2)
- addi r2, r2, 1
- bne r1, r2, 1b
-
- movia sp, 0x10000
- add sp, sp, r1
-
- addi sp, sp, -16
- stw r4, 0(sp)
- stw r5, 4(sp)
- stw r6, 8(sp)
- stw r7, 12(sp)
-
- call decompress_kernel
-
- ldw r4, 0(sp)
- ldw r5, 4(sp)
- ldw r6, 8(sp)
- ldw r7, 12(sp)
-
- movia r1, NIOS2_DCACHE_SIZE
- movui r2, NIOS2_DCACHE_LINE_SIZE
- 1: flushd 0(r1)
- sub r1, r1, r2
- bgt r1, r0, 1b
-
- movia r1, NIOS2_ICACHE_SIZE
- movui r2, NIOS2_ICACHE_LINE_SIZE
- 1: flushi r1
- sub r1, r1, r2
- bgt r1, r0, 1b
- flushp
-
- movia r1, (CONFIG_NIOS2_MEM_BASE | CONFIG_NIOS2_KERNEL_REGION_BASE)
- jmp r1
- .balign 512
- fake_headers_as_bzImage:
- .short 0
- .ascii "HdrS"
- .short 0x0202
- .short 0
- .short 0
- .byte 0x00, 0x10
- .short 0
- .byte 0
- .byte 1
- .byte 0x00, 0x80
- .long 0
- .long 0
|