/* $NetBSD: ofwstart.S,v 1.4 2014/09/20 23:10:46 phx Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. * All rights reserved. * * This code is derived from software contributed to The NetBSD Foundation * by Tim Rightnour * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #ifdef XCOFF_GLUE .text .globl _entry _entry: .long _start,0,0 #endif /* XCOFF_GLUE */ .text .globl _start /* This is the magical note section that IBM machines require * to boot. This should be a note, but gnu ld will not let us * position it at the start of the file. */ # length of name .long 8 # note descriptor size .long 24 # note type (IEEE 1275) .long 0x1275 # name of owner .asciz "PowerPC" .balign 4 # note descriptor # real mode (-1) or virtual mode (0) .long -1 # real-base .long -1 # real-size .long -1 # virt-base .long -1 # virt-size .long -1 # load-base .long 0x4000 /* note for dealing with IBM LPARs */ # length of name .long 24 # note descriptor size .long 28 # note type .long 0x12759999 # name of owner .asciz "IBM,RPA-Client-Config" .balign 4 # lpar affinity .long 0 # minimum size in megabytes .long 64 # minimum percentage size .long 0 # max pft size ( 2^48 bytes ) .long 48 # splpar .long 1 # min load ? .long -1 # new mem def ? .long 0 _start: sync isync lis %r1,stack+0x20000@ha addi %r1,%r1,stack+0x20000@l mfmsr %r8 li %r0,0 mtmsr %r0 isync mtibatu 0,%r0 mtibatu 1,%r0 mtibatu 2,%r0 mtibatu 3,%r0 mtdbatu 0,%r0 mtdbatu 1,%r0 mtdbatu 2,%r0 mtdbatu 3,%r0 li %r9,0x12 /* BATL(0, BAT_M, BAT_PP_RW) */ mtibatl 0,%r9 mtdbatl 0,%r9 li %r9,0x1ffe /* BATU(0, BAT_BL_256M, BAT_Vs) */ mtibatu 0,%r9 mtdbatu 0,%r9 isync mtmsr %r8 isync /* * Make sure that .bss is zeroed */ li %r0,0 lis %r8,_edata@ha addi %r8,%r8,_edata@l lis %r9,_end@ha addi %r9,%r9,_end@l 5: cmpw 0,%r8,%r9 bge 6f stw %r0,0(%r8) addi %r8,%r8,4 b 5b 6: b startup