1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 
  12 
  13 
  14 
  15 
  16 
  17 #include <linux/linkage.h>
  18 #include <asm/cache.h>
  19 
  20         .text
  21         .set noat
  22 ENTRY(_start)
  23         wrctl   status, r0              
  24         
  25         movia   r1, NIOS2_ICACHE_SIZE
  26         movui   r2, NIOS2_ICACHE_LINE_SIZE
  27 1:      initi   r1
  28         sub     r1, r1, r2
  29         bgt     r1, r0, 1b
  30         
  31         movia   r1, NIOS2_DCACHE_SIZE
  32         movui   r2, NIOS2_DCACHE_LINE_SIZE
  33 1:      initd   0(r1)
  34         sub     r1, r1, r2
  35         bgt     r1, r0, 1b
  36 
  37         nextpc  r1                      
  38 chkadr:
  39         movia   r2, chkadr
  40         beq     r1, r2, finish_move     
  41 
  42         
  43         addi    r1, r1, (_start - chkadr)       
  44         movia   r2, _start              
  45         movia   r3, __bss_start         
  46 1:      ldw     r8, 0(r1)               
  47         stw     r8, 0(r2)               
  48         addi    r1, r1, 4               
  49         addi    r2, r2, 4               
  50         blt     r2, r3, 1b
  51         
  52         movia   r1, NIOS2_DCACHE_SIZE
  53         movui   r2, NIOS2_DCACHE_LINE_SIZE
  54 1:      flushd  0(r1)
  55         sub     r1, r1, r2
  56         bgt     r1, r0, 1b
  57         movia   r1, finish_move
  58         jmp     r1                      
  59 
  60 finish_move:
  61         
  62         movia   r2, __bss_start         
  63         movia   r1, _end                
  64 1:      stb     r0, 0(r2)
  65         addi    r2, r2, 1
  66         bne     r1, r2, 1b
  67         
  68 
  69 
  70 
  71         movia   sp, 0x10000
  72         add     sp, sp, r1
  73         
  74         addi    sp, sp, -16
  75         stw     r4, 0(sp)
  76         stw     r5, 4(sp)
  77         stw     r6, 8(sp)
  78         stw     r7, 12(sp)
  79         
  80         call    decompress_kernel
  81         
  82         ldw     r4, 0(sp)
  83         ldw     r5, 4(sp)
  84         ldw     r6, 8(sp)
  85         ldw     r7, 12(sp)
  86 
  87         
  88         movia   r1, NIOS2_DCACHE_SIZE
  89         movui   r2, NIOS2_DCACHE_LINE_SIZE
  90 1:      flushd  0(r1)
  91         sub     r1, r1, r2
  92         bgt     r1, r0, 1b
  93         
  94         movia   r1, NIOS2_ICACHE_SIZE
  95         movui   r2, NIOS2_ICACHE_LINE_SIZE
  96 1:      flushi  r1
  97         sub     r1, r1, r2
  98         bgt     r1, r0, 1b
  99         flushp
 100         
 101         movia   r1, (CONFIG_NIOS2_MEM_BASE | CONFIG_NIOS2_KERNEL_REGION_BASE)
 102         jmp     r1
 103 
 104         .balign 512
 105 fake_headers_as_bzImage:
 106         .short  0
 107         .ascii  "HdrS"
 108         .short  0x0202
 109         .short  0
 110         .short  0
 111         .byte   0x00, 0x10
 112         .short  0
 113         .byte   0
 114         .byte   1
 115         .byte   0x00, 0x80
 116         .long   0
 117         .long   0