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