xref: /netbsd-src/sys/arch/hppa/stand/common/srt0.S (revision 6d3ceb1d619615401b17c9aa3e4bc674a1cb048b)
1/*	$NetBSD: srt0.S,v 1.1 2014/02/24 07:23:43 skrll Exp $	*/
2
3/*	$OpenBSD: srt0.S,v 1.7 2001/05/16 23:57:35 mickey Exp $	*/
4
5/*
6 * Copyright (c) 1998-2004 Michael Shalayeff
7 * All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 * 1. Redistributions of source code must retain the above copyright
13 *    notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright
15 *    notice, this list of conditions and the following disclaimer in the
16 *    documentation and/or other materials provided with the distribution.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21 * IN NO EVENT SHALL THE AUTHOR OR HIS RELATIVES BE LIABLE FOR ANY DIRECT,
22 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24 * SERVICES; LOSS OF MIND, USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
27 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
28 * THE POSSIBILITY OF SUCH DAMAGE.
29 */
30/*
31 * Copyright 1996 1995 by Open Software Foundation, Inc.
32 *              All Rights Reserved
33 *
34 * Permission to use, copy, modify, and distribute this software and
35 * its documentation for any purpose and without fee is hereby granted,
36 * provided that the above copyright notice appears in all copies and
37 * that both the copyright notice and this permission notice appear in
38 * supporting documentation.
39 *
40 * OSF DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE
41 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
42 * FOR A PARTICULAR PURPOSE.
43 *
44 * IN NO EVENT SHALL OSF BE LIABLE FOR ANY SPECIAL, INDIRECT, OR
45 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
46 * LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT,
47 * NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
48 * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
49 *
50 */
51;
52; Copyright (c) 1990 mt Xinu, Inc.  All rights reserved.
53; Copyright (c) 1990 University of Utah.  All rights reserved.
54;
55; This file may be freely distributed in any form as long as
56; this copyright notice is included.
57; THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
58; IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
59; WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
60;
61;	Utah $Hdr: srt0.c 1.3 94/12/13$
62;
63
64#define	_LOCORE
65#include <machine/iomod.h>
66#include <machine/asm.h>
67
68/*
69 * This is the ending of the begin
70 */
71ENTRY(begin,0)
72
73	blr	%r0,%r5			; Get address of 'boff' into 'r5',
74	ldo	begin-boff(%r5),%r5	;   and subtract to get 'begin'.
75boff:
76	ldil	L%RELOC,%r4
77	ldo	R%RELOC(%r4),%r4
78	ldo	start-begin(%r4),%rp
79	ldil	L%edata,%r3
80	ldo	R%edata(%r3),%r3	; Get address of edata.
81	ldil	L%begin,%r1
82	ldo	R%begin(%r1),%r1	; Get address of begin
83	sub	%r3,%r1,%r3		; Subtract to get # of bytes to copy
84copyloop:				; do
85	ldwm	4(%r5),%r1		;   *r4++ = *r5++;
86	addib,>= -4,%r3,copyloop	; while (--r3 >= 0);
87	stwm	%r1,4(%r4)
88
89	; here we zero the .bss
90	ldil	L%__bss_start, %r4
91	ldo	R%__bss_start(%r4), %r4
92	ldil	L%__bss_end, %r3
93	ldo	R%__bss_end(%r3), %r3
94zeroloop:
95	combf,<,n %r3,%r4, zeroloop	; while (r4 < r3);
96	stwm	%r0,4(%r4)		;	*r4++ = 0;
97
98	ldil	L%$global$,%dp
99	ldo	R%$global$(%dp),%dp
100	ldil	L%start,%r1
101	ldo	R%start(%r1),%r1
102	sub	%dp,%r1,%dp		; Subtract to get difference
103	add	%rp,%dp,%dp		;   and relocate it.
104
105;
106; We have relocated ourself to RELOC.  If we are running on a machine
107; with separate instruction and data caches, we must flush our data
108; cache before trying to execute the code starting at rp.
109;
110	ldil	L%RELOC,%r22		; Set %t1 to start of relocated code.
111	ldo	R%RELOC(%r22),%r22
112	ldil	L%edata,%r21		; Set r21 to address of edata
113	ldo	R%edata(%r21),%r21
114	ldil	L%begin,%r1		; set %r1 to address of begin
115	ldo	R%begin(%r1),%r1
116	sub	%r21,%r1,%r21		; Subtract to get length
117	mtsp	%r0,%sr0		; Set sr0 to kernel space.
118	ldo	-1(%r21),%r21
119	fdc	%r21(0,%r22)
120loop:	addib,>,n -16,%r21,loop		; Decrement by cache line size (16).
121	fdc	%r21(%sr0,%r22)
122	fdc	0(%sr0,%r22)		; Flush first word at addr to handle
123	sync				;   arbitrary cache line boundary.
124	nop				; Prevent prefetching.
125	nop
126	nop
127	nop
128	nop
129	nop
130	nop
131	bv	0(%rp)
132	nop
133EXIT(begin)				/* jump to relocated code */
134
135start:
136	ldil	L%HEAP_LIMIT, %sp
137	ldo	R%HEAP_LIMIT(%sp), %sp
138
139	b	boot			; Call boot(),
140	copy	%r0, %arg0		; use default boot device
141	nop
142
143/*
144 * rtt - restart the box
145 */
146LEAF_ENTRY(_rtt)
147	ldil    L%LBCAST_ADDR, %r25
148	ldi     CMD_RESET, %r26
149	stw     %r26,R%iomod_command(%r25)
150forever:				; Loop until bus reset takes effect.
151	b,n     forever
152
153	bv	0(%rp)
154	ldo     -48(%sp),%sp
155EXIT(_rtt)
156
157	.end
158