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