/*
* Copyright ( C ) 2009 Thomas Chou < thomas @ wytron . com . tw >
*
* Based on arch / nios2 / kernel / head . S
*
* This file is subject to the terms and conditions of the GNU General Public
* License . See the file " COPYING " in the main directory of this archive
* for more details .
*
*/
/*
* This code can be loaded anywhere , eg FLASH ROM as reset vector ,
* as long as output does not overlap it .
*/
#include <linux/linkage.h>
#include <asm/cache.h>
.text
.set noat
ENTRY(_start)
wrctl status, r0 /* disable interrupt */
/* invalidate all instruction cache */
movia r1, NIOS2_ICACHE_SIZE
movui r2, NIOS2_ICACHE_LINE_SIZE
1 : initi r1
sub r1, r1, r2
bgt r1, r0, 1 b
/* invalidate all data cache */
movia r1, NIOS2_DCACHE_SIZE
movui r2, NIOS2_DCACHE_LINE_SIZE
1 : initd 0 (r1)
sub r1, r1, r2
bgt r1, r0, 1 b
nextpc r1 /* Find out where we are */
chkadr:
movia r2, chkadr
beq r1, r2, finish_move /* We are running in correct address,
done */
/* move code, r1: src, r2: dest, r3: last dest */
addi r1, r1, (_start - chkadr) /* Source */
movia r2, _start /* Destination */
movia r3, __bss_start /* End of copy */
1 : ldw r8, 0 (r1) /* load a word from [r1] */
stw r8, 0 (r2) /* stort a word to dest [r2] */
addi r1, r1, 4 /* inc the src addr */
addi r2, r2, 4 /* inc the dest addr */
blt r2, r3, 1 b
/* flush the data cache after moving */
movia r1, NIOS2_DCACHE_SIZE
movui r2, NIOS2_DCACHE_LINE_SIZE
1 : flushd 0 (r1)
sub r1, r1, r2
bgt r1, r0, 1 b
movia r1, finish_move
jmp r1 /* jmp to linked address */
finish_move:
/* zero out the .bss segment (uninitialized common data) */
movia r2, __bss_start /* presume nothing is between */
movia r1, _end /* the .bss and _end. */
1 : stb r0, 0 (r2)
addi r2, r2, 1
bne r1, r2, 1 b
/*
* set up the stack pointer , some where higher than _ end .
* The stack space must be greater than 32 K for decompress .
*/
movia sp, 0 x10000
add sp, sp, r1
/* save args passed from u-boot, maybe */
addi sp, sp, -16
stw r4, 0 (sp)
stw r5, 4 (sp)
stw r6, 8 (sp)
stw r7, 12 (sp)
/* decompress the kernel */
call decompress_kernel
/* pass saved args to kernel */
ldw r4, 0 (sp)
ldw r5, 4 (sp)
ldw r6, 8 (sp)
ldw r7, 12 (sp)
/* flush all data cache after decompressing */
movia r1, NIOS2_DCACHE_SIZE
movui r2, NIOS2_DCACHE_LINE_SIZE
1 : flushd 0 (r1)
sub r1, r1, r2
bgt r1, r0, 1 b
/* flush all instruction cache */
movia r1, NIOS2_ICACHE_SIZE
movui r2, NIOS2_ICACHE_LINE_SIZE
1 : flushi r1
sub r1, r1, r2
bgt r1, r0, 1 b
flushp
/* jump to start real kernel */
movia r1, (CONFIG_NIOS2_MEM_BASE | CONFIG_NIOS2_KERNEL_REGION_BASE)
jmp r1
.balign 512
fake_headers_as_bzImage:
.short 0
.ascii "HdrS"
.short 0 x0202
.short 0
.short 0
.byte 0 x00, 0 x10
.short 0
.byte 0
.byte 1
.byte 0 x00, 0 x80
.long 0
.long 0
Messung V0.5 in Prozent C=78 H=100 G=89
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-09-30)
¤
*© Formatika GbR, Deutschland