Sync usage with man page.
[netbsd-mini2440.git] / sys / arch / sandpoint / stand / netboot / entry.S
blob8002a1047b972e8cf26377a66831daca2da3e86f
1 /* $NetBSD: entry.S,v 1.3 2007/11/05 13:41:48 nisimura Exp $ */
3 #include <powerpc/psl.h>
4 #include <powerpc/spr.h>
5 #include <powerpc/oea/bat.h>
6 #include <powerpc/oea/hid.h>
8         .text
9         .globl _start
10 _start:
11         mfspr   11,SPR_HID0
12         andi.   0,11,HID0_DCE
13         ori     11,11,HID0_ICE
14         ori     8,11,HID0_ICFI
15         bne     1f                      /* don't invalidate the D-cache */
16         ori     8,8,HID0_DCFI           /* unless it wasn't enabled */
18         mfmsr   0
19         andi.   0,0,PSL_DR
20         beq     2f
21         lis     5, 0xfec00000@ha        /* CONFIG_ADDR of PCI */
22         lis     6, 0xfee00000@ha        /* CONFIG_DATA of PCI */
23         mfspr   3,SPR_DBAT0U
24         mfspr   4,SPR_DBAT0L
25         bl      dbat_sanity_check
26         beq     3f
27         mfspr   3,SPR_DBAT1U
28         mfspr   4,SPR_DBAT1L
29         bl      dbat_sanity_check
30         beq     3f
31         mfspr   3,SPR_DBAT2U
32         mfspr   4,SPR_DBAT2L
33         bl      dbat_sanity_check
34         beq     3f
35         mfspr   3,SPR_DBAT3U
36         mfspr   4,SPR_DBAT3L
37         bl      dbat_sanity_check
38         beq     3f
40 2:      /* Disable D-cache */
41         li      0,HID0_DCE
42         andc    11,11,0
43         b       4f
45 3:      /* Enable D-cache */
46         ori     11,11,HID0_DCE
49         sync
50         mtspr   SPR_HID0,8              /* enable and invalidate caches */
51         sync
52         mtspr   SPR_HID0,11             /* enable caches */
53         sync
54         isync
56         /* make sure .bss gets zeroed. */
57         li      0,0
58         lis     8,edata@ha
59         addi    8,8,edata@l
60         lis     9,end@ha
61         addi    9,9,end@l
62 5:      cmpw    0,8,9                   /* edata & end are >= word aligned */
63         bge     6f
64         stw     0,0(8)
65         addi    8,8,4
66         b       5b
69         /* prepare stack at +1MB from _start. */
70         lis     1,_start@h
71         ori     1,1,_start@l
72         addis   1,1,0x10
73         addi    1,1,-4
75         bl      brdsetup
76         bl      main
78 hang:   b       hang
79         /* NOTREACHED */
81 dbat_sanity_check:
82         andi.   0,3,BAT_Vs
83         beq     2f
84         andi.   0,4,BAT_I|BAT_PP_RW
85         cmpwi   0,0,BAT_I|BAT_PP_RW
86         bnelr
87         rlwinm  0,3,15,4,14
88         andis.  3,3,0xfffe0000@ha       /* BAT_EPI */
89         andis.  4,4,BAT_RPN@ha
90         cmplw   0,3,4
91         bnelr
92         add     4,4,0
93         oris    4,4,0x0001ffff@ha
94         ori     4,4,0x0001ffff@l
95         cmplw   0,3,5
96         bgt     1f
97         cmplw   0,5,4
98         bgt     1f
99         li      5,0
100 1:      cmplw   0,3,6
101         bgt     2f
102         cmplw   0,6,4
103         bgt     2f
104         li      6,0
105 2:      cmplw   0,5,6
106         blr
109  * run(startsym, endsym, howto, bootinfo, entry)
110  */
111         .globl  run
112 run:
113         mtctr   7       /* hat trick jump to entry point */
114         bctr
117  * reverse endian access to mimic outw/outl/inw/inl
118  */
119         .globl out16rb
120         .globl iohtole16
121 out16rb:
122 iohtole16:
123         sthbrx  4,0,3
124         eieio
125         blr 
127         .globl out32rb
128         .globl iohtole32
129 out32rb:
130 iohtole32:
131         stwbrx  4,0,3
132         eieio
133         blr
135         .global in16rb
136         .global iole16toh
137 in16rb:
138 iole16toh:
139         lhbrx   3,0,3
140         eieio
141         blr
143         .global in32rb
144         .global iole32toh
145 in32rb:
146 iole32toh:
147         lwbrx   3,0,3
148         eieio
149         blr