obs200_locore.S revision 1.4
1/* $NetBSD: obs200_locore.S,v 1.4 2006/10/16 18:14:36 kiyohara 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#define _NOREGNAMES 73 74#include "opt_ddb.h" 75#include "opt_ipkdb.h" 76#include "opt_lockdebug.h" 77#include "opt_multiprocessor.h" 78#include "opt_ppcarch.h" 79#include "opt_ppcparam.h" 80#include "assym.h" 81#include "ksyms.h" 82 83#include <sys/syscall.h> 84 85#include <machine/param.h> 86#include <machine/psl.h> 87#include <machine/trap.h> 88#include <machine/asm.h> 89 90#include <powerpc/spr.h> 91#include <powerpc/ibm4xx/dcr405gp.h> 92#include <powerpc/ibm4xx/pmap.h> 93 94/* Function pointer for requesting board_config_data from OpenBlockS S/R BIOS */ 95#define BOARD_CFG_FP (0x00100000) 96 97/* 98 * Some instructions gas doesn't understand (yet?) 99 */ 100#define bdneq bdnzf 2, 101 102/* 103 * Globals 104 */ 105GLOBAL(proc0paddr) 106 .long 0 /* proc0 p_addr */ 107 108/* 109 * This symbol is here for the benefit of kvm_mkdb, and is supposed to 110 * mark the start of kernel text. 111 */ 112 .text 113 .globl _C_LABEL(kernel_text) 114_C_LABEL(kernel_text): 115 116/* 117 * Startup entry. Note, this must be the first thing in the text 118 * segment! 119 */ 120 .text 121 .globl __start 122__start: 123 b 1f 124 /* Reserve some space for info_block required for IBM eval board bootloader */ 125 nop 126 nop 127 nop 128 nop 129 nop 130 nop 131 nop 132 nop 133 nop 134 nop 135 1361: 137 /* Get the board_config_data from openbios */ 138 lis %r3,BOARD_CFG_FP@h 139 ori %r3,%r3,BOARD_CFG_FP@l 140 mr %r31,%r3 /* Save value in r31 */ 141 142 li %r0,0 143 mtmsr %r0 /* Disable FPU/MMU/exceptions */ 144 isync 145 146 /* PPC405GP errata, item #58. 147 * Load string instructions may write incorrect data into the last GPR 148 * targeted in the operation. 149 * Workaround: set OCM0_DSCNTL[DSEN]=0 and OCM0_DSCNTL[DOF]=0 */ 150 mtdcr DCR_OCM0_DSCNTL, %r0 /* Disable Data access to OCM */ 151 mtdcr DCR_OCM0_ISCNTL, %r0 /* Disable Instruction access to OCM. Just in case */ 152/* 153 * Cpu detect. 154 * 155 */ 156__start_cpu0: 157#ifdef PPC_4XX_NOCACHE 158 /* Disable all caches for physical addresses */ 159 li %r0,0 160#else 161 /* Allow cacheing for only the first 2GB of RAM */ 162 lis %r0,0xffff 163#endif 164 mtdccr %r0 165 mticcr %r0 166 167 /* Invalidate all TLB entries */ 168 tlbia 169 sync 170 isync 171/* get start of bss */ 172 lis %r3,_C_LABEL(_edata)-4@ha 173 addi %r3,%r3,_C_LABEL(_edata)-4@l 174/* get end of kernel memory */ 175 lis %r8,_C_LABEL(end)@ha 176 addi %r8,%r8,_C_LABEL(end)@l 177/* zero bss */ 178 li %r4,0 1792: stwu %r4,%r4(3) 180 cmpw %r3,%r8 181 bne+ 2b 182 183#if NKSYMS || defined(DDB) || defined(LKM) 184 /* If we had symbol table location we'd store it here and would've adjusted r8 here */ 185 lis %r7,_C_LABEL(startsym)@ha 186 addi %r7,%r7,_C_LABEL(startsym)@l 187 stw %r8,0(%r7) 188 lis %r7,_C_LABEL(endsym)@ha 189 addi %r7,%r7,_C_LABEL(endsym)@l 190 stw %r8,0(%r7) 191#endif 192 193 /* Set kernel MMU context. */ 194 li %r0,KERNEL_PID 195 mtpid %r0 196 sync 197 198 INIT_CPUINFO(8,1,9,0) 199 mr %r4,%r8 200 201 lis %r3,__start@ha 202 addi %r3,%r3,__start@l 203 204 mr %r6,%r31 /* info_block address */ 205 bl _C_LABEL(initppc) 206 bl _C_LABEL(main) 207 208loop: b loop /* XXX not reached */ 209 210#include <powerpc/ibm4xx/4xx_locore.S> 211