Changeset 01cb210 in mainline for arch/ppc32/loader/asm.S
- Timestamp:
- 2006-03-16T18:55:50Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 1f330de
- Parents:
- d89c554
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/ppc32/loader/asm.S
rd89c554 r01cb210 27 27 # 28 28 29 #include "asm.h" 29 30 #include "regname.h" 30 31 … … 36 37 .text 37 38 38 .global memsetb 39 .global memcpy 40 .global flush_instruction_cache 39 .global halt 41 40 .global jump_to_kernel 42 41 43 memsetb: 44 rlwimi r5, r5, 8, 16, 23 45 rlwimi r5, r5, 16, 0, 15 46 47 addi r14, r3, -4 48 49 cmplwi 0, r4, 4 50 blt 7f 51 52 stwu r5, 4(r14) 53 beqlr 54 55 andi. r15, r14, 3 56 add r4, r15, r4 57 subf r14, r15, r14 58 srwi r15, r4, 2 59 mtctr r15 60 61 bdz 6f 62 63 1: 64 stwu r5, 4(r14) 65 bdnz 1b 66 67 6: 68 69 andi. r4, r4, 3 70 71 7: 72 73 cmpwi 0, r4, 0 74 beqlr 75 76 mtctr r4 77 addi r6, r6, 3 78 79 8: 80 81 stbu r5, 1(r14) 82 bdnz 8b 83 84 blr 85 86 memcpy: 87 srwi. r7, r5, 3 88 addi r6, r3, -4 89 addi r4, r4, -4 90 beq 2f 91 92 andi. r0, r6, 3 93 mtctr r7 94 bne 5f 95 96 1: 97 98 lwz r7, 4(r4) 99 lwzu r8, 8(r4) 100 stw r7, 4(r6) 101 stwu r8, 8(r6) 102 bdnz 1b 103 104 andi. r5, r5, 7 105 106 2: 107 108 cmplwi 0, r5, 4 109 blt 3f 110 111 lwzu r0, 4(r4) 112 addi r5, r5, -4 113 stwu r0, 4(r6) 114 115 3: 116 117 cmpwi 0, r5, 0 118 beqlr 119 mtctr r5 120 addi r4, r4, 3 121 addi r6, r6, 3 122 123 4: 124 125 lbzu r0, 1(r4) 126 stbu r0, 1(r6) 127 bdnz 4b 128 blr 129 130 5: 131 132 subfic r0, r0, 4 133 mtctr r0 134 135 6: 136 137 lbz r7, 4(r4) 138 addi r4, r4, 1 139 stb r7, 4(r6) 140 addi r6, r6, 1 141 bdnz 6b 142 subf r5, r0, r5 143 rlwinm. r7, r5, 32-3, 3, 31 144 beq 2b 145 mtctr r7 146 b 1b 147 148 flush_instruction_cache: 149 150 # Flush data cache 151 152 lis r3, flush_buffer@h 153 ori r3, r3, flush_buffer@l 154 li r4, L1_CACHE_LINES 155 mtctr r4 156 157 0: 158 159 lwz r4, 0(r3) 160 addi r3, r3, L1_CACHE_BYTES 161 bdnz 0b 162 163 # Invalidate instruction cache 164 165 li r3, 0 166 ori r3, r3, (hid0_ice | hid0_dce | hid0_icfi | hid0_dci) 167 mfspr r4, hid0 168 or r5, r4, r3 169 isync 170 mtspr hid0, r5 171 sync 172 isync 173 174 # Enable instruction cache 175 176 ori r5, r4, hid0_ice 177 mtspr hid0, r5 178 sync 179 isync 180 blr 42 halt: 43 b halt 181 44 182 45 jump_to_kernel: 183 46 184 # r3 = kernel_start (va) 185 # r4 = memmap (pa) 186 # r5 = real_mode (pa) 47 # r3 = memmap (pa) 48 # r4 = trans (pa) 49 # r5 = number of kernel pages 50 # r6 = real_mode (pa) 187 51 188 mtspr srr0, r 552 mtspr srr0, r6 189 53 190 54 # jumps to real_mode 191 55 192 mfmsr r 5193 lis r 6, ~0@h194 ori r 6, r6, ~(msr_ir | msr_dr)@l195 and r 5, r5, r6196 mtspr srr1, r 556 mfmsr r31 57 lis r30, ~0@h 58 ori r30, r30, ~(msr_ir | msr_dr)@l 59 and r31, r31, r30 60 mtspr srr1, r31 197 61 rfi 198 62 199 63 .section REALMODE 200 .align 1264 .align PAGE_WIDTH 201 65 .global real_mode 202 66 203 67 real_mode: 204 68 69 # copy kernel to proper location 70 # 71 # r4 = trans (pa) 72 # r5 = number of kernel pages 73 74 li r31, PAGE_SIZE >> 3 75 li r30, 0 76 77 page_copy: 78 79 cmpwi r5, 0 80 beq copy_end 81 82 # copy single page 83 84 mtctr r31 85 lwz r29, 0(r4) 86 87 copy_loop: 88 89 lwz r28, 0(r29) 90 stw r28, 0(r30) 91 92 addi r29, r29, 4 93 addi r30, r30, 4 94 95 bdnz copy_loop 96 97 subi r5, r5, 1 98 addi r4, r4, 4 99 b page_copy 100 101 copy_end: 102 205 103 # fill segment registers 206 104 207 li r 5, 16208 mtctr r 5209 li r 5, 0210 li r 6,0105 li r31, 16 106 mtctr r31 107 li r31, 0 108 li r30, 0x2000 211 109 212 110 seg_fill: 213 111 214 mtsrin r6, r5 215 addis r5, r5, 0x1000 # move to next SR 216 addis r6, r6, 0x10 # add 256 MB, move to next SR 112 mtsrin r30, r31 113 114 addis r31, r31, 0x1000 # add 256 MB 115 addi r30, r30, 0x111 # move to next SR 217 116 218 117 bdnz seg_fill 219 118 220 # bootstrap kernel 119 # create identity mapping 120 121 tlbia 122 123 # start the kernel 221 124 # 222 # r3 = kernel_start (va) 223 # r4 = memmap (pa) -> r10 125 # r3 = memmap (pa) 224 126 225 mtspr srr0, r3 127 lis r31, KERNEL_START_ADDR@ha 128 addi r31, r31, KERNEL_START_ADDR@l 226 129 227 mfmsr r5 228 ori r5, r5, (msr_ir | msr_dr)@l 229 mtspr srr1, r5 130 mtspr srr0, r31 230 131 231 mr r10, r4 132 mfmsr r31 133 ori r31, r31, (msr_ir | msr_dr)@l 134 mtspr srr1, r31 135 232 136 rfi 137 138 .align PAGE_WIDTH 139 .global trans 140 trans: 141 .space (TRANS_SIZE * TRANS_ITEM_SIZE)
Note:
See TracChangeset
for help on using the changeset viewer.