locore.S revision 1.5
1/* $NetBSD: locore.S,v 1.5 2009/02/13 22:41:03 apb Exp $ */ 2/* $OpenBSD: locore.S,v 1.4 1997/01/26 09:06:38 rahnds Exp $ */ 3 4/* 5 * Copyright 2001 Wasabi Systems, Inc. 6 * All rights reserved. 7 * 8 * Written by Eduardo Horvath and Simon Burge for Wasabi Systems, Inc. 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions 12 * are met: 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 3. All advertising materials mentioning features or use of this software 19 * must display the following acknowledgement: 20 * This product includes software developed for the NetBSD Project by 21 * Wasabi Systems, Inc. 22 * 4. The name of Wasabi Systems, Inc. may not be used to endorse 23 * or promote products derived from this software without specific prior 24 * written permission. 25 * 26 * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND 27 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 28 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 29 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL WASABI SYSTEMS, INC 30 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 31 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 32 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 33 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 34 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 35 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 36 * POSSIBILITY OF SUCH DAMAGE. 37 */ 38 39/* 40 * Copyright (C) 1995, 1996 Wolfgang Solfrank. 41 * Copyright (C) 1995, 1996 TooLs GmbH. 42 * All rights reserved. 43 * 44 * Redistribution and use in source and binary forms, with or without 45 * modification, are permitted provided that the following conditions 46 * are met: 47 * 1. Redistributions of source code must retain the above copyright 48 * notice, this list of conditions and the following disclaimer. 49 * 2. Redistributions in binary form must reproduce the above copyright 50 * notice, this list of conditions and the following disclaimer in the 51 * documentation and/or other materials provided with the distribution. 52 * 3. All advertising materials mentioning features or use of this software 53 * must display the following acknowledgement: 54 * This product includes software developed by TooLs GmbH. 55 * 4. The name of TooLs GmbH may not be used to endorse or promote products 56 * derived from this software without specific prior written permission. 57 * 58 * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR 59 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 60 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 61 * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 62 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 63 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 64 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 65 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 66 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 67 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 68 */ 69 70#undef PPC_4XX_NOCACHE 71#define _NOREGNAMES 72 73#include "opt_ddb.h" 74#include "opt_ipkdb.h" 75#include "opt_lockdebug.h" 76#include "opt_modular.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 openbios*/ 95#define BOARD_CFG_FP 0xFFFE0B50 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 108GLOBAL(intrnames) 109 .asciz "clock", "irq1", "irq2", "irq3" 110 .asciz "irq4", "irq5", "irq6", "irq7" 111 .asciz "irq8", "irq9", "irq10", "irq11" 112 .asciz "irq12", "irq13", "irq14", "irq15" 113 .asciz "irq16", "irq17", "irq18", "irq19" 114 .asciz "irq20", "irq21", "irq22", "irq23" 115 .asciz "irq24", "irq25", "irq26", "irq27" 116 .asciz "irq28", "softnet", "softclock", "softserial" 117 .asciz "statclock" 118GLOBAL(eintrnames) 119 .align 4 120GLOBAL(intrcnt) 121 .long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 122 .long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 123 .long 0 124GLOBAL(eintrcnt) 125 126/* 127 * This symbol is here for the benefit of kvm_mkdb, and is supposed to 128 * mark the start of kernel text. 129 */ 130 .text 131 .globl _C_LABEL(kernel_text) 132_C_LABEL(kernel_text): 133 134/* 135 * Startup entry. Note, this must be the first thing in the text 136 * segment! 137 */ 138 .text 139 .globl __start 140__start: 141 b 1f 142 /* Reserve some space for info_block required for IBM eval board bootloader */ 143 nop 144 nop 145 nop 146 nop 147 nop 148 nop 149 nop 150 nop 151 nop 152 nop 153 1541: 155 /* Get the board_config_data from openbios */ 156 lis %r3,BOARD_CFG_FP@h 157 ori %r3,%r3,BOARD_CFG_FP@l 158 lwz %r0,0x0(%r3) 159 mtctr %r0 160 bctrl /* call the xcoff function */ 161 mr %r31,%r3 /* Save value in r31 */ 162 163 li %r0,0 164 mtmsr %r0 /* Disable FPU/MMU/exceptions */ 165 isync 166 167 /* PPC405GP errata, item #58. 168 * Load string instructions may write incorrect data into the last GPR 169 * targeted in the operation. 170 * Workaround: set OCM0_DSCNTL[DSEN]=0 and OCM0_DSCNTL[DOF]=0 */ 171 mtdcr DCR_OCM0_DSCNTL, %r0 /* Disable Data access to OCM */ 172 mtdcr DCR_OCM0_ISCNTL, %r0 /* Disable Instruction access to OCM. Just in case */ 173/* 174 * Cpu detect. 175 * 176 */ 177__start_cpu0: 178#ifdef PPC_4XX_NOCACHE 179 /* Disable all caches for physical addresses */ 180 li %r0,0 181#else 182 /* Allow cacheing for only the first 2GB of RAM */ 183 lis %r0,0xffff 184#endif 185 mtdccr %r0 186 mticcr %r0 187 188 /* Invalidate all TLB entries */ 189 tlbia 190 sync 191 isync 192/* get start of bss */ 193 lis %r3,_C_LABEL(_edata)-4@ha 194 addi %r3,%r3,_C_LABEL(_edata)-4@l 195/* get end of kernel memory */ 196 lis %r8,_C_LABEL(end)@ha 197 addi %r8,%r8,_C_LABEL(end)@l 198/* zero bss */ 199 li %r4,0 2002: stwu %r4,%r4(3) 201 cmpw %r3,%r8 202 bne+ 2b 203 204#if NKSYMS || defined(DDB) || defined(MODULAR) 205 /* If we had symbol table location we'd store it here and would've adjusted r8 here */ 206 lis %r7,_C_LABEL(startsym)@ha 207 addi %r7,%r7,_C_LABEL(startsym)@l 208 stw %r8,0(%r7) 209 lis %r7,_C_LABEL(endsym)@ha 210 addi %r7,%r7,_C_LABEL(endsym)@l 211 stw %r8,0(%r7) 212#endif 213 214 /* Set kernel MMU context. */ 215 li %r0,KERNEL_PID 216 mtpid %r0 217 sync 218 219 INIT_CPUINFO(8,1,9,0) 220 mr %r4,%r8 221 222 lis %r3,__start@ha 223 addi %r3,%r3,__start@l 224 225 mr %r6,%r31 /* info_block address */ 226 bl _C_LABEL(initppc) 227 bl _C_LABEL(main) 228 229loop: b loop /* XXX not reached */ 230 231#include <powerpc/ibm4xx/4xx_locore.S> 232