Home | History | Annotate | Line # | Download | only in lcboot
      1  1.4  andvar /* $NetBSD: start.S,v 1.4 2021/08/09 19:57:57 andvar Exp $ */
      2  1.1     igy 
      3  1.1     igy /*
      4  1.2     igy  * Copyright (c) 2003 Naoto Shimazaki.
      5  1.1     igy  * All rights reserved.
      6  1.1     igy  *
      7  1.1     igy  * Redistribution and use in source and binary forms, with or without
      8  1.1     igy  * modification, are permitted provided that the following conditions
      9  1.1     igy  * are met:
     10  1.1     igy  * 1. Redistributions of source code must retain the above copyright
     11  1.1     igy  *    notice, this list of conditions and the following disclaimer.
     12  1.1     igy  * 2. Redistributions in binary form must reproduce the above copyright
     13  1.1     igy  *    notice, this list of conditions and the following disclaimer in the
     14  1.1     igy  *    documentation and/or other materials provided with the distribution.
     15  1.1     igy  *
     16  1.2     igy  * THIS SOFTWARE IS PROVIDED BY NAOTO SHIMAZAKI AND CONTRIBUTORS ``AS IS''
     17  1.2     igy  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
     18  1.2     igy  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     19  1.2     igy  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE NAOTO OR CONTRIBUTORS BE
     20  1.2     igy  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     21  1.1     igy  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     22  1.1     igy  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     23  1.1     igy  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     24  1.1     igy  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     25  1.2     igy  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
     26  1.2     igy  * THE POSSIBILITY OF SUCH DAMAGE.
     27  1.1     igy  */
     28  1.1     igy 
     29  1.1     igy /*
     30  1.1     igy  * NOTE:
     31  1.1     igy  * This code assumes some trick described below:
     32  1.1     igy  *
     33  1.1     igy  *	- Located at 0x80000000 by linker
     34  1.1     igy  *	- Placed at 0xbfc00000 (by ROM writer)
     35  1.1     igy  *	- Executed at 0xbfc00000 by CPU
     36  1.1     igy  *
     37  1.1     igy  * So,
     38  1.1     igy  *
     39  1.1     igy  *	- You cannot use 'j' and 'jal'.  Instead, you must use 'b'.
     40  1.1     igy  *	- If you want to jump to absolute address, you must load
     41  1.1     igy  *	  the target address to a register and jump to it with
     42  1.1     igy  *	  'jr' or 'jalr'.
     43  1.1     igy  *	- You never be able to write any memory before
     44  1.1     igy  *	  the bus configuration completed.
     45  1.1     igy  *
     46  1.1     igy  */
     47  1.1     igy 
     48  1.1     igy #include <sys/cdefs.h>
     49  1.1     igy #include <sys/errno.h>
     50  1.1     igy #include <sys/syscall.h>
     51  1.1     igy 
     52  1.1     igy #include <machine/param.h>
     53  1.1     igy #include <mips/asm.h>
     54  1.1     igy #include <mips/cpuregs.h>
     55  1.1     igy #include <mips/trap.h>
     56  1.1     igy 
     57  1.1     igy #include "extern.h"
     58  1.1     igy 
     59  1.1     igy 	.text
     60  1.1     igy 	.set	noreorder
     61  1.1     igy 	.align	2
     62  1.1     igy 
     63  1.1     igy /*
     64  1.1     igy  * macro ROMICE  - support for Kyoto-micro's PARTNER-ETII ROM-ICE
     65  1.1     igy  *
     66  1.1     igy  * PARTNER-ETII by Kyoto-microcomputer is a ROM based emulater.
     67  1.1     igy  * This ICE initializes by itself the very early configurations of
     68  1.1     igy  * the target CPU.  This macro skips that configurations.
     69  1.1     igy  */
     70  1.1     igy #ifndef ROMICE
     71  1.1     igy 	/*
     72  1.1     igy 	 * exception vector table
     73  1.1     igy 	 */
     74  1.1     igy 	.org	0x0000
     75  1.1     igy reset_vector:
     76  1.1     igy 	b	start		/* MUST relative jump */
     77  1.1     igy 	nop
     78  1.1     igy 
     79  1.1     igy 	.org	0x0200
     80  1.1     igy tlb_vector:
     81  1.1     igy 	b	start
     82  1.1     igy 	nop
     83  1.1     igy 
     84  1.1     igy 	.org	0x0280
     85  1.1     igy xtlb_vector:
     86  1.1     igy 	b	start
     87  1.1     igy 	nop
     88  1.1     igy 
     89  1.1     igy 	.org	0x0380
     90  1.1     igy exception_vector:
     91  1.1     igy 	b	start
     92  1.1     igy 	nop
     93  1.1     igy #endif
     94  1.1     igy 
     95  1.1     igy 	.org	0x1000
     96  1.1     igy 	.globl	start
     97  1.1     igy start:
     98  1.1     igy #ifndef ROMICE
     99  1.1     igy 	/*
    100  1.1     igy 	 * setup CP0 CONFIG
    101  1.1     igy 	 * EP = 0, AD = 0, K0 = 2
    102  1.1     igy 	 */
    103  1.1     igy 	li	t1, 0x00125482
    104  1.1     igy 	mtc0	t1, $16
    105  1.1     igy 
    106  1.1     igy 	/*
    107  1.1     igy 	 * setup CP0 STATUS
    108  1.1     igy 	 * CU0 = 0, RE = 0, DS:BEV = 0, IM = 0, KX = SX = UX = 0,
    109  1.1     igy 	 * KSU = 0, IE = 0, others = untouch
    110  1.1     igy 	 */
    111  1.1     igy 	mfc0	t1, $12
    112  1.1     igy 	li	t2, 0x00770006
    113  1.1     igy 	and	t1, t1, t2
    114  1.1     igy 	li	t2, 0x00400000
    115  1.1     igy 	or	t1, t1, t2
    116  1.1     igy 	mtc0	t1, $12
    117  1.1     igy 
    118  1.1     igy 	mtc0	zero, $18		/* CP0 Watch Lo */
    119  1.1     igy 	mtc0	zero, $11		/* CP0 compare */
    120  1.1     igy 
    121  1.1     igy 	/*
    122  1.1     igy 	 * setup LED
    123  1.1     igy 	 */
    124  1.1     igy 	li	t0, 0xab000248		/* LEDCNTREG */
    125  1.1     igy 	li	t1, 0x0001
    126  1.1     igy 	sh	t1, (t0)
    127  1.1     igy 
    128  1.1     igy 	/*
    129  1.1     igy 	 * reset HALTimer
    130  1.1     igy 	 */
    131  1.1     igy 	li	t0, 0xab0000a2
    132  1.1     igy 	li	t1, 0x0004
    133  1.1     igy 	sh	t1, (t0)
    134  1.1     igy 
    135  1.1     igy 	/*
    136  1.1     igy 	 * initialize VR4181 bus controller
    137  1.1     igy 	 */
    138  1.1     igy 
    139  1.1     igy 	/*
    140  1.1     igy 	 * setup BCUCNTREG1
    141  1.1     igy 	 * ROMs = 10 (64Mbit), ROMWEN0 = 1, Rtype = 01 (flash)
    142  1.1     igy 	 * RSTOUT = 1 (inactive)
    143  1.1     igy 	 */
    144  1.1     igy 	li	t0, 0xaa000000		/* BCUCNTREG1 */
    145  1.1     igy 	li	t1, 0x8013
    146  1.1     igy 	sh	t1, (t0)
    147  1.1     igy 
    148  1.1     igy 	/*
    149  1.1     igy 	 * setup BCURFCNTREG
    150  1.1     igy 	 * BRF = refresh cycle x 1/TClock
    151  1.1     igy 	 *     = 30.52usec x 32.768MHz
    152  1.1     igy 	 *     = 0x3e8	(1000 TClock)
    153  1.1     igy 	 */
    154  1.1     igy 	li	t0, 0xaa000010		/* BCURFCNTREG */
    155  1.1     igy 	li	t1, 0x03e8
    156  1.1     igy 	sh	t1, (t0)
    157  1.1     igy 
    158  1.1     igy 	/*
    159  1.1     igy 	 * setup BCUSPEEDREG
    160  1.1     igy 	 * WPROM = 111 = 8.5TClock = 259ns
    161  1.1     igy 	 * WROMA = 1000 = 9.5TClock = 290ns
    162  1.1     igy 	 */
    163  1.1     igy 	li	t0, 0xaa00000c		/* BCUSPEEDREG */
    164  1.1     igy 	li	t1, 0x7008
    165  1.1     igy 	sh	t1, (t0)
    166  1.1     igy 
    167  1.1     igy 	/*
    168  1.1     igy 	 * setup SDTIMINGREG
    169  1.1     igy 	 * BIT8 = 1 (always 1)
    170  1.1     igy 	 * TRAS = 01 = 5SDCLK	(forced under 66, 50, 33MHz bus clock)
    171  1.1     igy 	 * TRC  = 01 = 7SDCLK	(forced under 66, 50, 33MHz bus clock)
    172  1.1     igy 	 * TRP  = 10 = 3SDCLK	(forced under 66, 50, 33MHz bus clock)
    173  1.1     igy 	 * TRCP = 01 = 2SDCLK	(forced under 66, 50, 33MHz bus clock)
    174  1.1     igy 	 */
    175  1.1     igy 	li	t0, 0xaa00030c		/* SDTIMINGREG */
    176  1.1     igy 	li	t1, 0x0159
    177  1.1     igy 	sh	t1, (t0)
    178  1.1     igy 
    179  1.1     igy 	/*
    180  1.1     igy 	 * To initialize 64Mbit SDRAM properly, we have to take
    181  1.1     igy 	 * following steps:
    182  1.1     igy 	 *
    183  1.1     igy 	 * 	1. set MEMCFG_REG for 16Mbit SDRAM
    184  1.1     igy 	 * 	2. setup MODE_REG
    185  1.1     igy 	 * 	3. init SDRAM (setting MEMCFG_REG:Init to 1)
    186  1.1     igy 	 * 	4. set MEMCFG_REG for 64Mbit SDRAM
    187  1.1     igy 	 *
    188  1.1     igy 	 * confirm to VR4181 users manual 6.5.2 MEMCFG_REG (page 142).
    189  1.1     igy 	 * (the page number is for Japanese edition.  it might be
    190  1.1     igy 	 *  at another page number for the English edition.)
    191  1.1     igy 	 */
    192  1.1     igy 
    193  1.1     igy 	/*
    194  1.1     igy 	 * first, say MEMCFG_REG that SDRAM is 16Mbit
    195  1.1     igy 	 * Init = 0
    196  1.1     igy 	 * B1Config = 01	(16Mbit)
    197  1.1     igy 	 * Bstreftype = 1	(all raw refresh)
    198  1.1     igy 	 * BstRefr = 0		(not allow burst refresh)
    199  1.4  andvar 	 * EDOAsym = 0		(asymmetric)
    200  1.1     igy 	 * B0Config = 01	(16Mbit)
    201  1.1     igy 	 * EDO/SDRAM = 1	(SDRAM)
    202  1.1     igy 	 */
    203  1.1     igy 	li	t0, 0xaa000304		/* MEMCFG_REG <- 503 (16Mbit) */
    204  1.1     igy 	li	t1, 0x0503
    205  1.1     igy 	sh	t1, (t0)
    206  1.1     igy 
    207  1.1     igy 	/*
    208  1.1     igy 	 * second, setup MODE_REG
    209  1.1     igy 	 * Bit11 = 0		(always 0)
    210  1.1     igy 	 * Bit10 = 0		(always 0)
    211  1.1     igy 	 * BR-SW = 0		(always 0)
    212  1.1     igy 	 * TE-Ven = 00		(always 00)
    213  1.1     igy 	 * LTMode = 011		(3clock CAS latency)
    214  1.1     igy 	 * WT = 0		(always 0)
    215  1.1     igy 	 * BL = 111		(always 111)
    216  1.1     igy 	 */
    217  1.1     igy 	li	t0, 0xaa000308		/* MODE_REG */
    218  1.1     igy 	li	t1, 0x0037
    219  1.1     igy 	sh	t1, (t0)
    220  1.1     igy 
    221  1.1     igy 	/*
    222  1.1     igy 	 * third, kick SDRAM initialization
    223  1.1     igy 	 * Init = 1
    224  1.1     igy 	 * other = untouched
    225  1.1     igy 	 */
    226  1.1     igy 	li	t0, 0xaa000304		/* MEMCFG_REG:Init <- 1 */
    227  1.1     igy 	li	t1, 0x8503
    228  1.1     igy 	sh	t1, (t0)
    229  1.1     igy 
    230  1.1     igy 	/*
    231  1.1     igy 	 * final, say MEMCFG_REG that SDRAM is 16Mbit
    232  1.1     igy 	 * Init = 0
    233  1.1     igy 	 * B1Config = 10	(64Mbit)
    234  1.1     igy 	 * Bstreftype = 1	(all raw refresh)
    235  1.1     igy 	 * BstRefr = 0		(not allow burst refresh)
    236  1.4  andvar 	 * EDOAsym = 0		(asymmetric)
    237  1.1     igy 	 * B0Config = 10	(64Mbit)
    238  1.1     igy 	 * EDO/SDRAM = 1	(SDRAM)
    239  1.1     igy 	 */
    240  1.1     igy 	li	t0, 0xaa000304		/* MEMCFG_REG */
    241  1.1     igy 	li	t1, 0x0905
    242  1.1     igy 	sh	t1, (t0)
    243  1.1     igy 
    244  1.1     igy 	/*
    245  1.1     igy 	 * setup XISACTL
    246  1.1     igy 	 * EXTRESULT = 1	(1 is recommended)
    247  1.1     igy 	 * INTRESULT = 0	(0 is recommended)
    248  1.1     igy 	 * EXBUFEN = 0		(use SYSDIR and SYSEN)
    249  1.1     igy 	 * MEMWS = 00		(1.5 SYSCLK)
    250  1.1     igy 	 * IOWS = 10		(2.5 SYSCLK)
    251  1.1     igy 	 * SCLKDIV = 10		(PCLK/6)
    252  1.1     igy 	 */
    253  1.1     igy 	li	t0, 0xab0002c4		/* XISACTL */
    254  1.1     igy 	li	t1, 0x0422
    255  1.1     igy 	sh	t1, (t0)
    256  1.1     igy 	nop
    257  1.1     igy 
    258  1.1     igy 
    259  1.1     igy 	/*
    260  1.1     igy 	 *  enable cache
    261  1.1     igy 	 */
    262  1.1     igy 	mfc0	t0, $16
    263  1.1     igy 	li	t1, 0xfffffff8
    264  1.1     igy 	and	t0, t0, t1
    265  1.1     igy 	or	t0, t0, 0x00000003	/* K0 = 3 */
    266  1.1     igy 	mtc0	t0, $16			/* config */
    267  1.1     igy 	nop
    268  1.1     igy 	nop
    269  1.1     igy 	nop
    270  1.1     igy 
    271  1.1     igy 	/*
    272  1.1     igy 	 * initialize cache
    273  1.1     igy 	 */
    274  1.1     igy 	mtc0	zero, $28		/* TagLo */
    275  1.1     igy 
    276  1.1     igy 	lui	t0, 0x8000		/* vaddr */
    277  1.1     igy 	ori	t1, zero, 0x1000	/* cache size = 4KB */
    278  1.1     igy cache_clear:
    279  1.1     igy 	.set	push
    280  1.1     igy 	.set	mips3
    281  1.1     igy 	cache	0x00, (t0)		/* Index_Invalidate */
    282  1.1     igy 	cache	0x09, (t0)		/* Index_Store_Tag */
    283  1.1     igy 	.set	pop
    284  1.1     igy 	addiu	t1, t1, -0x10
    285  1.1     igy 	bgtz	t1, cache_clear
    286  1.1     igy 	addiu	t0, t0, 0x10		/* increment of line size */
    287  1.1     igy 
    288  1.1     igy 
    289  1.1     igy 	/* LED3 ON */
    290  1.1     igy 	li	t0, 0xab000306
    291  1.1     igy 	li	t1, 0x0800
    292  1.1     igy 	sh	t1, (t0)
    293  1.1     igy 
    294  1.1     igy 	li	t0, 0xab000308
    295  1.1     igy 	sh	zero, (t0)
    296  1.1     igy 	nop
    297  1.1     igy 	/* LED3 ON */
    298  1.1     igy 
    299  1.1     igy 	/*
    300  1.1     igy 	 * now early bus configuration is done.
    301  1.1     igy 	 */
    302  1.1     igy 
    303  1.1     igy 
    304  1.1     igy 	/*
    305  1.1     igy 	 *  copy bootloader ROM to RAM
    306  1.1     igy 	 */
    307  1.1     igy 	li	t1, LCBOOT_ROMSTARTADDR
    308  1.1     igy 	la	t2, start
    309  1.1     igy 	la	t3, edata
    310  1.1     igy 1:
    311  1.1     igy 	lw	t0, (t1)
    312  1.1     igy 	nop
    313  1.1     igy 	sw	t0, (t2)
    314  1.1     igy 	addu	t2, t2, 4
    315  1.1     igy 	sltu	t0, t2, t3
    316  1.1     igy 	.set	push
    317  1.1     igy 	.set	noreorder
    318  1.1     igy 	.set	nomacro
    319  1.1     igy 	bne	t0, zero, 1b
    320  1.1     igy 	addu	t1, t1, 4
    321  1.1     igy 	.set	pop
    322  1.1     igy 
    323  1.1     igy 
    324  1.1     igy 	/* verify */
    325  1.1     igy 	li	t1, LCBOOT_ROMSTARTADDR
    326  1.1     igy 	la	t2, start
    327  1.1     igy 	la	t3, edata
    328  1.1     igy 1:
    329  1.1     igy 	lw	t0, (t1)
    330  1.1     igy 	lw	t4, (t2)
    331  1.1     igy 	addu	t2, t2, 4
    332  1.1     igy 	bne	t0, t4, 2f
    333  1.1     igy 	sltu	t0, t2, t3
    334  1.1     igy 	.set	push
    335  1.1     igy 	.set	noreorder
    336  1.1     igy 	.set	nomacro
    337  1.1     igy 	bne	t0, zero, 1b
    338  1.1     igy 	addu	t1, t1, 4
    339  1.1     igy 	.set	pop
    340  1.1     igy 	b	4f
    341  1.1     igy 	nop
    342  1.1     igy 2:
    343  1.1     igy 	/* panic. stop LED */
    344  1.1     igy 	li	t0, 0xab000248		/* LEDCNTREG */
    345  1.1     igy 	sh	zero, (t0)
    346  1.1     igy 3:
    347  1.1     igy 	b	3b
    348  1.1     igy 	nop
    349  1.1     igy 4:
    350  1.1     igy 	/* verify done */
    351  1.1     igy 
    352  1.1     igy 
    353  1.1     igy 	/* LED4 ON */
    354  1.1     igy 	li	t0, 0xab000306
    355  1.1     igy 	li	t1, 0x8800
    356  1.1     igy 	sh	t1, (t0)
    357  1.1     igy 
    358  1.1     igy 	li	t0, 0xab000308
    359  1.1     igy 	sh	zero, (t0)
    360  1.1     igy 	/* LED4 ON */
    361  1.1     igy 
    362  1.1     igy 	/*
    363  1.1     igy 	 * now we've got a working RAM with cache.
    364  1.1     igy 	 */
    365  1.1     igy 
    366  1.1     igy 
    367  1.1     igy #else /* !ROMICE */
    368  1.1     igy 	/*
    369  1.1     igy 	 * enable cache
    370  1.1     igy 	 */
    371  1.1     igy 	mfc0	t0, $16
    372  1.1     igy 	li	t1, 0xfffffff8
    373  1.1     igy 	and	t0, t0, t1
    374  1.1     igy 	or	t0, t0, 0x00000003	/* K0 = 3 */
    375  1.1     igy 	mtc0	t0, $16			/* config */
    376  1.1     igy 	nop
    377  1.1     igy 	nop
    378  1.1     igy 	nop
    379  1.1     igy #endif /* !ROMICE */
    380  1.1     igy 
    381  1.1     igy 
    382  1.1     igy 	/*
    383  1.1     igy 	 * zero the bss
    384  1.1     igy 	 */
    385  1.1     igy 	la	t1, edata
    386  1.1     igy 	la	t2, end
    387  1.1     igy 	sw	zero, (t1)
    388  1.1     igy 1:
    389  1.1     igy 	addu	t1, t1, 4
    390  1.1     igy 	.set	push
    391  1.1     igy 	.set	mips3
    392  1.1     igy 	.set	noreorder
    393  1.1     igy 	.set	nomacro
    394  1.1     igy 	sltu	t0, t1, t2
    395  1.1     igy 	bnel	t0, zero, 1b
    396  1.1     igy 	sw	zero, (t1)		/* delay slot */
    397  1.1     igy 	.set	pop
    398  1.1     igy 
    399  1.1     igy 
    400  1.1     igy 
    401  1.1     igy 
    402  1.1     igy #ifdef DEBUG_LED
    403  1.1     igy 	/* LED5 ON */
    404  1.1     igy 	li	t0, 0xab000302
    405  1.1     igy 	li	t1, 0x0002
    406  1.1     igy 	sh	t1, (t0)
    407  1.1     igy 
    408  1.1     igy 	li	t0, 0xab00030a
    409  1.1     igy 	sh	zero, (t0)
    410  1.1     igy 	/* LED5 ON */
    411  1.1     igy #endif
    412  1.1     igy 
    413  1.1     igy #ifdef DEBUG_LED
    414  1.1     igy 	/* LED6 ON */
    415  1.1     igy 	li	t0, 0xab000300
    416  1.1     igy 	li	t1, 0x0020
    417  1.1     igy 	sh	t1, (t0)
    418  1.1     igy 
    419  1.1     igy 	li	t0, 0xab00030a
    420  1.1     igy 	sh	zero, (t0)
    421  1.1     igy 	/* LED6 ON */
    422  1.1     igy #endif
    423  1.1     igy 
    424  1.1     igy 
    425  1.1     igy 
    426  1.1     igy 	/*
    427  1.1     igy 	 * call lcboot main()
    428  1.1     igy 	 */
    429  1.1     igy 	move	a0, zero		/* a0:	argc = 0 */
    430  1.1     igy 	move	a1, zero		/* a1 */
    431  1.1     igy 	move	a2, zero		/* a2 */
    432  1.1     igy 	move	a3, zero		/* a3 */
    433  1.1     igy 	move	k0, zero		/* k0 */
    434  1.1     igy 	move	k1, zero		/* k1 */
    435  1.1     igy 	la	gp, _C_LABEL(_gp)	/* global pointer */
    436  1.1     igy 	la	sp, start		/* stack pointer */
    437  1.1     igy 	la	v0, main
    438  1.1     igy 	jalr	v0
    439  1.1     igy 	nop
    440  1.1     igy 
    441  1.1     igy 	.globl	start_netbsd
    442  1.1     igy start_netbsd:
    443  1.1     igy 	/*
    444  1.1     igy 	 * all LED OFF
    445  1.1     igy 	 */
    446  1.1     igy 	li	t0, 0xab000248		/* LEDCNTREG */
    447  1.1     igy 	sh	zero, (t0)
    448  1.1     igy 	li	t1, 0xffff
    449  1.1     igy 	li	t0, 0xab000308
    450  1.1     igy 	sh	t1, (t0)
    451  1.1     igy 	li	t0, 0xab00030a
    452  1.1     igy 	sh	t1, (t0)
    453  1.1     igy 
    454  1.1     igy 	/*
    455  1.1     igy 	 * initialize registers
    456  1.1     igy 	 */
    457  1.1     igy 	li	a0, 1			/* a0:	argc = 1 */
    458  1.1     igy 	la	a1, argv0		/* a1:	argv */
    459  1.1     igy 	la	a2, bootinfo		/* a2:	bootinfo */
    460  1.1     igy 	move	a3, zero		/* a3 */
    461  1.1     igy 	move	k0, zero		/* k0 */
    462  1.1     igy 	move	k1, zero		/* k1 */
    463  1.1     igy 	/* no need to set grobal pointer. it set in locore.S */
    464  1.1     igy 	la	sp, NETBSD_STARTADDR	/* stack pointer */
    465  1.1     igy 	/*
    466  1.1     igy 	 * call netbsd
    467  1.1     igy 	 */
    468  1.1     igy 	jr	sp
    469  1.1     igy 	nop
    470  1.1     igy 
    471  1.1     igy 
    472  1.1     igy /*
    473  1.1     igy  * arguments for mach_init()
    474  1.1     igy  */
    475  1.1     igy 	.data
    476  1.1     igy argv0:
    477  1.1     igy 	.word	argv0c
    478  1.1     igy argv1:
    479  1.1     igy 	.word	0
    480  1.1     igy argv0c:
    481  1.1     igy 	.asciiz	"netbsd"
    482  1.1     igy 
    483  1.1     igy bootinfo:
    484  1.1     igy 	.half	34		/* length */
    485  1.1     igy 	.half	0		/* reserved */
    486  1.1     igy 	.word	0x13536135	/* magic */
    487  1.1     igy 	.word	0		/* fb_addr */
    488  1.1     igy 	.half	0		/* fb_line_bytes */
    489  1.1     igy 	.half	0		/* fb_width */
    490  1.1     igy 	.half	0		/* fb_height */
    491  1.1     igy 	.half	0		/* fb_type */
    492  1.1     igy 	.half	2		/* BI_CNUSE_SERIAL */
    493  1.1     igy 	.half	0		/* padding */
    494  1.1     igy 	.word	0x04104400	/* PLATID_CPU_MIPS_VR_4181 */
    495  1.1     igy 	.word	0x03810100	/* PLATID_MACH_LASER5_L_CARD */
    496  1.1     igy 	.word	0		/* GMT */
    497  1.1     igy 
    498  1.1     igy /*
    499  1.1     igy  * End of start.S
    500  1.1     igy  */
    501