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
0022 .text
0023
0024 .globl _zimage_start
0025 _zimage_start:
0026
0027
0028 mfmsr 9
0029 rlwinm 9, 9, 0, ~((1<<4)|(1<<5))
0030 bcl 20, 31, 1f
0031 1:
0032 mflr 8
0033 clrlwi 8, 8, 3
0034 addi 8, 8, _mmu_off - 1b
0035 mtsrr0 8
0036 mtsrr1 9
0037 rfi
0038 _mmu_off:
0039
0040
0041
0042 isync
0043 li 8, 0
0044 mtspr 0x210, 8
0045 mtspr 0x212, 8
0046 mtspr 0x214, 8
0047 mtspr 0x216, 8
0048 mtspr 0x218, 8
0049 mtspr 0x21a, 8
0050 mtspr 0x21c, 8
0051 mtspr 0x21e, 8
0052
0053 mtspr 0x230, 8
0054 mtspr 0x232, 8
0055 mtspr 0x234, 8
0056 mtspr 0x236, 8
0057 mtspr 0x238, 8
0058 mtspr 0x23a, 8
0059 mtspr 0x23c, 8
0060 mtspr 0x23e, 8
0061
0062 li 8, 0x01ff
0063 li 9, 0x0002
0064 mtspr 0x211, 9
0065 mtspr 0x210, 8
0066 mtspr 0x219, 9
0067 mtspr 0x218, 8
0068
0069 lis 8, 0x0c00
0070 ori 8, 8, 0x3ff
0071 lis 9, 0x0c00
0072 ori 9, 9, 0x002a
0073 mtspr 0x21b, 9
0074 mtspr 0x21a, 8
0075
0076 lis 8, 0x0100
0077 ori 8, 8, 0x00ff
0078 lis 9, 0x0100
0079 ori 9, 9, 0x0002
0080 mtspr 0x215, 9
0081 mtspr 0x214, 8
0082 mtspr 0x21d, 9
0083 mtspr 0x21c, 8
0084
0085 lis 8, 0x1000
0086 ori 8, 8, 0x07ff
0087 lis 9, 0x1000
0088 ori 9, 9, 0x0002
0089 mtspr 0x216, 8
0090 mtspr 0x217, 9
0091 mtspr 0x21e, 8
0092 mtspr 0x21f, 9
0093
0094
0095 mfspr 8, 0x3f3
0096 oris 8, 8, 0x0200
0097 mtspr 0x3f3, 8
0098
0099
0100 mfspr 8, 0x3f0
0101 andi. 0, 8, (1<<15)
0102 bne 1f
0103 ori 8, 8, (1<<15)|(1<<11)
0104 1:
0105 andi. 0, 8, (1<<14)
0106 bne 1f
0107 ori 8, 8, (1<<14)|(1<<10)
0108 1:
0109 mtspr 0x3f0, 8
0110 isync
0111
0112
0113 li 3, 0
0114 li 4, 0
0115 li 5, 0
0116
0117
0118 bcl 20, 31, 1f
0119 1:
0120 mflr 8
0121 addi 8, 8, _mmu_on - 1b
0122 mfmsr 9
0123 ori 9, 9, (1<<4)|(1<<5)
0124 mtsrr0 8
0125 mtsrr1 9
0126 sync
0127 rfi
0128 _mmu_on:
0129
0130 lis 8, 0x0d00
0131 ori 8, 8, 0x00c0
0132 lwz 9, 0(8)
0133 ori 9, 9, 0x20
0134 stw 9, 0(8)
0135
0136 b _zimage_start_lib
0137