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 1291: 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 1722: 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 201loop: b loop /* XXX not reached */ 202 203#include <powerpc/ibm4xx/4xx_locore.S> 204