xref: /freebsd/sys/powerpc/aim/locore.S (revision c4f6a2a9e1b1879b618c436ab4f56ff75c73a0f5)
1/* $FreeBSD$ */
2/* $NetBSD: locore.S,v 1.24 2000/05/31 05:09:17 thorpej Exp $ */
3
4/*
5 * Copyright (C) 2001 Benno Rice
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 *    notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 *    notice, this list of conditions and the following disclaimer in the
15 *    documentation and/or other materials provided with the distribution.
16 *
17 * THIS SOFTWARE IS PROVIDED BY Benno Rice ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
23 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
25 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
26 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28/*
29 * Copyright (C) 1995, 1996 Wolfgang Solfrank.
30 * Copyright (C) 1995, 1996 TooLs GmbH.
31 * All rights reserved.
32 *
33 * Redistribution and use in source and binary forms, with or without
34 * modification, are permitted provided that the following conditions
35 * are met:
36 * 1. Redistributions of source code must retain the above copyright
37 *    notice, this list of conditions and the following disclaimer.
38 * 2. Redistributions in binary form must reproduce the above copyright
39 *    notice, this list of conditions and the following disclaimer in the
40 *    documentation and/or other materials provided with the distribution.
41 * 3. All advertising materials mentioning features or use of this software
42 *    must display the following acknowledgement:
43 *	This product includes software developed by TooLs GmbH.
44 * 4. The name of TooLs GmbH may not be used to endorse or promote products
45 *    derived from this software without specific prior written permission.
46 *
47 * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR
48 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
49 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
50 * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
51 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
52 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
53 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
54 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
55 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
56 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
57 */
58
59#include "opt_ddb.h"
60#include "opt_ipkdb.h"
61#include "assym.s"
62
63#include <sys/syscall.h>
64
65#include <machine/trap.h>
66#include <machine/param.h>
67#include <machine/sr.h>
68#include <machine/spr.h>
69#include <machine/psl.h>
70#include <machine/asm.h>
71
72/*
73 * Some instructions gas doesn't understand (yet?)
74 */
75#define	bdneq	bdnzf 2,
76
77/*
78 * Globals
79 */
80	.data
81GLOBAL(tmpstk)
82	.space	8208
83GLOBAL(esym)
84	.long	0			/* end of symbol table */
85
86GLOBAL(ofmsr)
87	.long	0			/* msr used in Open Firmware */
88
89GLOBAL(powersave)
90	.long	0
91
92#define	INTSTK		8192		/* 8K interrupt stack */
93#define	SPILLSTK	4096		/* 4K spill stack */
94
95/*
96 * File-scope for locore.S
97 */
98idle_u:
99	.long	0			/* fake uarea during idle after exit */
100openfirmware_entry:
101	.long	0			/* openfirmware entry point */
102srsave:
103	.long	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
104
105/*
106 * This symbol is here for the benefit of kvm_mkdb, and is supposed to
107 * mark the start of kernel text.
108 */
109	.text
110	.globl	kernel_text
111kernel_text:
112
113/*
114 * Startup entry.  Note, this must be the first thing in the text
115 * segment!
116 */
117	.text
118	.globl	__start
119__start:
120#ifdef	FIRMWORKSBUGS
121	mfmsr	0
122	andi.	0,0,PSL_IR|PSL_DR
123	beq	1f
124
125	bl	ofwr_init
1261:
127#endif
128	li	8,0
129	li	9,0x100
130	mtctr	9
1311:
132	dcbf	0,8
133	icbi	0,8
134	addi	8,8,0x20
135	bdnz	1b
136	sync
137	isync
138
139	mtibatu	0,0
140	mtibatu	1,0
141	mtibatu	2,0
142	mtibatu	3,0
143	mtdbatu	0,0
144	mtdbatu	1,0
145	mtdbatu	2,0
146	mtdbatu	3,0
147
148	li	9,0x12
149	mtibatl	0,9
150	mtdbatl	0,9
151	li	9,0x1ffe
152	mtibatu	0,9
153	mtdbatu	0,9
154	isync
155
156	/* Save the argument pointer and length */
157	mr	20,6
158	mr	21,7
159
160	lis	8,openfirmware_entry@ha
161	stw	5,openfirmware_entry@l(8) /* save client interface handler */
162	mr	3,5
163
164	lis	1,tmpstk@ha
165	addi	1,1,tmpstk@l
166	addi	1,1,8192
167
168	mfmsr	0
169	lis	9,ofmsr@ha
170	stw	0,ofmsr@l(9)
171
172	bl	OF_init
173
174	lis	4,end@ha
175	addi	4,4,end@l
176	mr	5,4
177
178	lis	3,kernel_text@ha
179	addi	3,3,kernel_text@l
180
181	/* Restore the argument pointer and length */
182	mr	6,20
183	mr	7,21
184
185	bl	powerpc_init
186	bl	mi_startup
187	b	OF_exit
188
189/*
190 * int setfault()
191 *
192 * Similar to setjmp to setup for handling faults on accesses to user memory.
193 * Any routine using this may only call bcopy, either the form below,
194 * or the (currently used) C code optimized, so it doesn't use any non-volatile
195 * registers.
196 */
197	.globl	setfault
198setfault:
199	mflr	0
200	mfcr	12
201	mfsprg	4,0
202	lwz	4,PC_CURTHREAD(4)
203	lwz	4,TD_PCB(4)
204	stw	3,PCB_ONFAULT(4)
205	stw	0,0(3)
206	stw	1,4(3)
207	stw	2,8(3)
208	stmw	12,12(3)
209	xor	3,3,3
210	blr
211
212#include <powerpc/powerpc/trap_subr.S>
213