xref: /netbsd-src/sys/arch/sbmips/stand/common/start.S (revision cc51cff61922042a4d4d3c2e9d06b6063fd54014)
1*cc51cff6Scgd/* $NetBSD: start.S,v 1.2 2003/02/07 17:52:08 cgd Exp $ */
2c188bc0cScgd
3c188bc0cScgd/*
4c188bc0cScgd * Copyright 2000, 2001
5c188bc0cScgd * Broadcom Corporation. All rights reserved.
6c188bc0cScgd *
7c188bc0cScgd * This software is furnished under license and may be used and copied only
8c188bc0cScgd * in accordance with the following terms and conditions.  Subject to these
9c188bc0cScgd * conditions, you may download, copy, install, use, modify and distribute
10c188bc0cScgd * modified or unmodified copies of this software in source and/or binary
11c188bc0cScgd * form. No title or ownership is transferred hereby.
12c188bc0cScgd *
13c188bc0cScgd * 1) Any source code used, modified or distributed must reproduce and
14c188bc0cScgd *    retain this copyright notice and list of conditions as they appear in
15c188bc0cScgd *    the source file.
16c188bc0cScgd *
17c188bc0cScgd * 2) No right is granted to use any trade name, trademark, or logo of
18*cc51cff6Scgd *    Broadcom Corporation.  The "Broadcom Corporation" name may not be
19*cc51cff6Scgd *    used to endorse or promote products derived from this software
20*cc51cff6Scgd *    without the prior written permission of Broadcom Corporation.
21c188bc0cScgd *
22c188bc0cScgd * 3) THIS SOFTWARE IS PROVIDED "AS-IS" AND ANY EXPRESS OR IMPLIED
23c188bc0cScgd *    WARRANTIES, INCLUDING BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES OF
24c188bc0cScgd *    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
25c188bc0cScgd *    NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL BROADCOM BE LIABLE
26c188bc0cScgd *    FOR ANY DAMAGES WHATSOEVER, AND IN PARTICULAR, BROADCOM SHALL NOT BE
27c188bc0cScgd *    LIABLE FOR DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28c188bc0cScgd *    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29c188bc0cScgd *    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
30c188bc0cScgd *    BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
31c188bc0cScgd *    WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
32c188bc0cScgd *    OR OTHERWISE), EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33c188bc0cScgd */
34c188bc0cScgd
35c188bc0cScgd#define STACK_SIZE 8192
36c188bc0cScgd
37c188bc0cScgd#include "include/asm.h"
38c188bc0cScgd
39c188bc0cScgd
40c188bc0cScgd	  .bss
41c188bc0cScgd
42c188bc0cScgd	  .comm stack_bottom,STACK_SIZE
43c188bc0cScgd
44c188bc0cScgd	.text
45c188bc0cScgd
46c188bc0cScgdLEAF(start)
47c188bc0cScgd
48c188bc0cScgd	la	gp,_gp
49c188bc0cScgd
50c188bc0cScgd	la	sp,stack_bottom+STACK_SIZE-32
51c188bc0cScgd
52c188bc0cScgd/*
53c188bc0cScgd * On entry: a0 = the firmware handle, a2 = firmware's
54c188bc0cScgd * for secondary bootstraps, a1 is the booted device handle
55c188bc0cScgd * Don't trash a0..a3 until main is called!
56c188bc0cScgd */
57c188bc0cScgd
58c188bc0cScgd
59c188bc0cScgd#if defined(STANDALONE_PROGRAM)
60c188bc0cScgd	/*
61c188bc0cScgd	 * This should not be used anywhere.
62c188bc0cScgd	 */
63c188bc0cScgd
64c188bc0cScgd#error "don't do this."
65c188bc0cScgd
66c188bc0cScgd#else /* defined(STANDALONE_PROGRAM) */
67c188bc0cScgd
68c188bc0cScgd#if !defined(PRIMARY_BOOTBLOCK) && !defined(UNIFIED_BOOTBLOCK)
69c188bc0cScgd
70c188bc0cScgd        la      sp,start
71c188bc0cScgd
72c188bc0cScgd#endif /* !defined(PRIMARY_BOOTBLOCK) && !defined(UNIFIED_BOOTBLOCK) */
73c188bc0cScgd
74c188bc0cScgd#endif /* defined(STANDALONE_PROGRAM) */
75c188bc0cScgd
76c188bc0cScgd/*
77c188bc0cScgd * Zero BSS
78c188bc0cScgd */
79c188bc0cScgd
80c188bc0cScgd	la	t0,_edata		/* t0 = address */
81c188bc0cScgd	la	t1,_end
82c188bc0cScgd
83c188bc0cScgd1:	sw	zero,0(t0)
84c188bc0cScgd	sw	zero,4(t0)
85c188bc0cScgd	sw	zero,8(t0)
86c188bc0cScgd	sw	zero,16(t0)
87c188bc0cScgd	add	t0,16
88c188bc0cScgd	ble	t0,t1,1b
89c188bc0cScgd
90c188bc0cScgd
91c188bc0cScgd/*
92c188bc0cScgd * Run the main program.
93c188bc0cScgd */
94c188bc0cScgd
95c188bc0cScgd	jal     main			/* transfer to C */
96c188bc0cScgd
97c188bc0cScgdXLEAF(halt)
98c188bc0cScgd	li	t0,0xBFC00000		/* transfer back to firmware */
99c188bc0cScgd	j	t0
100c188bc0cScgdEND(start)
101c188bc0cScgd
102c188bc0cScgd
103c188bc0cScgd
104c188bc0cScgdLEAF(__main)
105c188bc0cScgd	j	ra
106c188bc0cScgdEND(__main)
107c188bc0cScgd
108c188bc0cScgdLEAF(_rtt)
109c188bc0cScgd	li	t0,0xBFC00000
110c188bc0cScgd	j	t0
111c188bc0cScgdEND(_rtt)
112