Home | History | Annotate | Line # | Download | only in obs405
      1 /*	$NetBSD: obs200_locore.S,v 1.13 2018/07/15 05:16:42 maxv Exp $	*/
      2 /*	Original Tag: locore.S,v 1.1 2003/09/23 15:21:58 shige Exp	*/
      3 /*	$OpenBSD: locore.S,v 1.4 1997/01/26 09:06:38 rahnds Exp $	*/
      4 
      5 /*
      6  * Copyright 2001 Wasabi Systems, Inc.
      7  * All rights reserved.
      8  *
      9  * Written by Eduardo Horvath and Simon Burge for Wasabi Systems, Inc.
     10  *
     11  * Redistribution and use in source and binary forms, with or without
     12  * modification, are permitted provided that the following conditions
     13  * are met:
     14  * 1. Redistributions of source code must retain the above copyright
     15  *    notice, this list of conditions and the following disclaimer.
     16  * 2. Redistributions in binary form must reproduce the above copyright
     17  *    notice, this list of conditions and the following disclaimer in the
     18  *    documentation and/or other materials provided with the distribution.
     19  * 3. All advertising materials mentioning features or use of this software
     20  *    must display the following acknowledgement:
     21  *      This product includes software developed for the NetBSD Project by
     22  *      Wasabi Systems, Inc.
     23  * 4. The name of Wasabi Systems, Inc. may not be used to endorse
     24  *    or promote products derived from this software without specific prior
     25  *    written permission.
     26  *
     27  * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
     28  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     29  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     30  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL WASABI SYSTEMS, INC
     31  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     32  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     33  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     34  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     35  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     36  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     37  * POSSIBILITY OF SUCH DAMAGE.
     38  */
     39 
     40 /*
     41  * Copyright (C) 1995, 1996 Wolfgang Solfrank.
     42  * Copyright (C) 1995, 1996 TooLs GmbH.
     43  * All rights reserved.
     44  *
     45  * Redistribution and use in source and binary forms, with or without
     46  * modification, are permitted provided that the following conditions
     47  * are met:
     48  * 1. Redistributions of source code must retain the above copyright
     49  *    notice, this list of conditions and the following disclaimer.
     50  * 2. Redistributions in binary form must reproduce the above copyright
     51  *    notice, this list of conditions and the following disclaimer in the
     52  *    documentation and/or other materials provided with the distribution.
     53  * 3. All advertising materials mentioning features or use of this software
     54  *    must display the following acknowledgement:
     55  *	This product includes software developed by TooLs GmbH.
     56  * 4. The name of TooLs GmbH may not be used to endorse or promote products
     57  *    derived from this software without specific prior written permission.
     58  *
     59  * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR
     60  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     61  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     62  * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     63  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     64  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
     65  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     66  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
     67  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
     68  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     69  */
     70 
     71 #undef PPC_4XX_NOCACHE
     72 
     73 #include "opt_ddb.h"
     74 #include "opt_lockdebug.h"
     75 #include "opt_modular.h"
     76 #include "opt_multiprocessor.h"
     77 #include "opt_ppcarch.h"
     78 #include "opt_ppcparam.h"
     79 #include "assym.h"
     80 #include "ksyms.h"
     81 
     82 #include <sys/syscall.h>
     83 
     84 #include <machine/param.h>
     85 #include <machine/psl.h>
     86 #include <machine/trap.h>
     87 #include <machine/asm.h>
     88 
     89 #include <powerpc/spr.h>
     90 #include <powerpc/ibm4xx/spr.h>
     91 #include <powerpc/ibm4xx/dcr4xx.h>
     92 
     93 /* Function pointer for requesting board_config_data from OpenBlockS S/R BIOS */
     94 #define BOARD_CFG_FP	(0x00100000)
     95 
     96 /*
     97  * Some instructions gas doesn't understand (yet?)
     98  */
     99 #define	bdneq	bdnzf 2,
    100 
    101 /*
    102  * This symbol is here for the benefit of kvm_mkdb, and is supposed to
    103  * mark the start of kernel text.
    104  */
    105 	.text
    106 	.globl	_C_LABEL(kernel_text)
    107 _C_LABEL(kernel_text):
    108 
    109 /*
    110  * Startup entry.  Note, this must be the first thing in the text
    111  * segment!
    112  */
    113 	.text
    114 	.globl	__start
    115 __start:
    116 	b	1f
    117 	/* Reserve some space for info_block required for IBM eval board bootloader */
    118 	nop
    119 	nop
    120 	nop
    121 	nop
    122 	nop
    123 	nop
    124 	nop
    125 	nop
    126 	nop
    127 	nop
    128 
    129 1:
    130 	/* Get the board_config_data from openbios */
    131 	lis	%r3,BOARD_CFG_FP@h
    132 	ori	%r3,%r3,BOARD_CFG_FP@l
    133 	mr	%r31,%r3		/* Save value in r31 */
    134 
    135 	li	%r0,0
    136 	mtmsr	%r0			/* Disable FPU/MMU/exceptions */
    137 	isync
    138 
    139 	/* PPC405GP errata, item #58.
    140 	 * Load string instructions may write incorrect data into the last GPR
    141 	 * targeted in the operation.
    142 	 * Workaround: set OCM0_DSCNTL[DSEN]=0 and OCM0_DSCNTL[DOF]=0 */
    143 	mtdcr	DCR_OCM0_DSCNTL, %r0  	/* Disable Data access to OCM */
    144 	mtdcr	DCR_OCM0_ISCNTL, %r0  	/* Disable Instruction access to OCM. Just in case */
    145 /*
    146  * Cpu detect.
    147  *
    148  */
    149 __start_cpu0:
    150 #ifdef PPC_4XX_NOCACHE
    151 	/* Disable all caches for physical addresses */
    152 	li	%r0,0
    153 #else
    154 	/* Allow cacheing for only the first 2GB of RAM */
    155 	lis	%r0,0xffff
    156 #endif
    157 	mtdccr	%r0
    158 	mticcr	%r0
    159 
    160 	/* Invalidate all TLB entries */
    161 	tlbia
    162 	sync
    163 	isync
    164 /* get start of bss */
    165 	lis	%r3,_C_LABEL(_edata)-4@ha
    166 	addi	%r3,%r3,_C_LABEL(_edata)-4@l
    167 /* get end of kernel memory */
    168 	lis	%r8,_C_LABEL(end)@ha
    169 	addi	%r8,%r8,_C_LABEL(end)@l
    170 /* zero bss */
    171 	li	%r4,0
    172 2:	stwu	%r4,4(%r3)
    173 	cmpw	%r3,%r8
    174 	bne+	2b
    175 
    176 #if NKSYMS || defined(DDB) || defined(MODULAR)
    177 	/* If we had symbol table location we'd store it here and would've adjusted r8 here */
    178 	lis	%r7,_C_LABEL(startsym)@ha
    179 	addi	%r7,%r7,_C_LABEL(startsym)@l
    180 	stw	%r8,0(%r7)
    181 	lis	%r7,_C_LABEL(endsym)@ha
    182 	addi	%r7,%r7,_C_LABEL(endsym)@l
    183 	stw	%r8,0(%r7)
    184 #endif
    185 
    186 	/* Set kernel MMU context. */
    187 	li	%r0,KERNEL_PID
    188 	mtpid	%r0
    189 	sync
    190 
    191 	INIT_CPUINFO(8,1,9,0)
    192 	mr	%r4,%r8
    193 
    194 	lis	%r3,__start@ha
    195 	addi	%r3,%r3,__start@l
    196 
    197 	mr	%r6,%r31		/* info_block address */
    198 	bl	_C_LABEL(initppc)
    199 	bl	_C_LABEL(main)
    200 
    201 loop:	b	loop			/* XXX not reached */
    202 
    203 #include <powerpc/ibm4xx/4xx_locore.S>
    204