0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #include "ppc_asm.h"
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021 .text
0022
0023 .globl _zimage_start
0024 _zimage_start:
0025
0026
0027 mfmsr 9
0028 rlwinm 9, 9, 0, ~((1<<4)|(1<<5))
0029 bcl 20, 31, 1f
0030 1:
0031 mflr 8
0032 clrlwi 8, 8, 3
0033 addi 8, 8, _mmu_off - 1b
0034 mtsrr0 8
0035 mtsrr1 9
0036 rfi
0037 _mmu_off:
0038
0039
0040
0041 isync
0042 li 8, 0
0043 mtspr 0x210, 8
0044 mtspr 0x212, 8
0045 mtspr 0x214, 8
0046 mtspr 0x216, 8
0047 mtspr 0x218, 8
0048 mtspr 0x21a, 8
0049 mtspr 0x21c, 8
0050 mtspr 0x21e, 8
0051
0052 li 8, 0x01ff
0053 li 9, 0x0002
0054 mtspr 0x211, 9
0055 mtspr 0x210, 8
0056 mtspr 0x219, 9
0057 mtspr 0x218, 8
0058
0059 lis 8, 0x0c00
0060 ori 8, 8, 0x3ff
0061 lis 9, 0x0c00
0062 ori 9, 9, 0x002a
0063 mtspr 0x21b, 9
0064 mtspr 0x21a, 8
0065
0066 lis 8, 0x0100
0067 ori 8, 8, 0x00ff
0068 lis 9, 0x0100
0069 ori 9, 9, 0x0002
0070 mtspr 0x215, 9
0071 mtspr 0x214, 8
0072 mtspr 0x21d, 9
0073 mtspr 0x21c, 8
0074
0075
0076 mfspr 8, 0x3f0
0077 andi. 0, 8, (1<<15)
0078 bne 1f
0079 ori 8, 8, (1<<15)|(1<<11)
0080 1:
0081 andi. 0, 8, (1<<14)
0082 bne 1f
0083 ori 8, 8, (1<<14)|(1<<10)
0084 1:
0085 mtspr 0x3f0, 8
0086 isync
0087
0088
0089 li 3, 0
0090 li 4, 0
0091 li 5, 0
0092
0093
0094 bcl 20, 31, 1f
0095 1:
0096 mflr 8
0097 addi 8, 8, _mmu_on - 1b
0098 mfmsr 9
0099 ori 9, 9, (1<<4)|(1<<5)
0100 mtsrr0 8
0101 mtsrr1 9
0102 sync
0103 rfi
0104 _mmu_on:
0105 b _zimage_start_lib
0106