1/*- 2 * Copyright (C) 2007 by Oleksandr Tymoshenko. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 14 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 15 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 16 * IN NO EVENT SHALL THE AUTHOR OR HIS RELATIVES BE LIABLE FOR ANY DIRECT, 17 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 18 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 19 * SERVICES; LOSS OF MIND, USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 21 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 22 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 23 * THE POSSIBILITY OF SUCH DAMAGE. 24 * 25 */ 26 27#include <sys/cdefs.h> 28__FBSDID("$FreeBSD$"); 29 30#include "opt_ddb.h" 31 32#include <sys/param.h> 33#include <sys/conf.h> 34#include <sys/kernel.h> 35#include <sys/systm.h> 36#include <sys/imgact.h> 37#include <sys/bio.h> 38#include <sys/buf.h> 39#include <sys/bus.h> 40#include <sys/cpu.h> 41#include <sys/cons.h> 42#include <sys/exec.h> 43#include <sys/ucontext.h> 44#include <sys/proc.h> 45#include <sys/kdb.h> 46#include <sys/ptrace.h> 47#include <sys/reboot.h> 48#include <sys/signalvar.h> 49#include <sys/sysent.h> 50#include <sys/sysproto.h> 51#include <sys/user.h> 52 53#include <vm/vm.h> 54#include <vm/vm_object.h> 55#include <vm/vm_page.h> 56 57#include <machine/cache.h> 58#include <machine/clock.h> 59#include <machine/cpu.h> 60#include <machine/cpuinfo.h> 61#include <machine/cpufunc.h> 62#include <machine/cpuregs.h> 63#include <machine/hwfunc.h> 64#include <machine/intr_machdep.h> 65#include <machine/locore.h> 66#include <machine/md_var.h> 67#include <machine/pte.h> 68#include <machine/sigframe.h> 69#include <machine/trap.h> 70#include <machine/vmparam.h> 71 72extern int *edata; 73extern int *end; 74 75void 76platform_cpu_init() 77{ 78 /* Nothing special */ 79} 80 81static void 82mips_init(void) 83{ 84 int i; 85 86 printf("entry: mips_init()\n"); 87 88 bootverbose = 1; 89 realmem = btoc(16 << 20); 90 91 for (i = 0; i < 10; i++) { 92 phys_avail[i] = 0; 93 } 94 95 /* phys_avail regions are in bytes */ 96 phys_avail[0] = MIPS_KSEG0_TO_PHYS(kernel_kseg0_end); 97 phys_avail[1] = ctob(realmem); 98 99 dump_avail[0] = phys_avail[0]; 100 dump_avail[1] = phys_avail[1]; 101 102 physmem = realmem; 103 104 init_param1(); 105 init_param2(physmem); 106 mips_cpu_init(); 107 pmap_bootstrap(); 108 mips_proc0_init(); 109 mutex_init(); 110 111 kdb_init(); 112#ifdef KDB 113 if (boothowto & RB_KDB) 114 kdb_enter(KDB_WHY_BOOTFLAGS, "Boot flags requested debugger"); 115#endif 116} 117 118void 119platform_reset(void) 120{ 121 122 __asm __volatile("li $25, 0xbfc00000"); 123 __asm __volatile("j $25"); 124} 125 126void 127platform_start(__register_t a0 __unused, __register_t a1 __unused, 128 __register_t a2 __unused, __register_t a3 __unused) 129{ 130 vm_offset_t kernend; 131 uint64_t platform_counter_freq = 175 * 1000 * 1000; 132 133 /* clear the BSS and SBSS segments */ 134 kernend = (vm_offset_t)&end; 135 memset(&edata, 0, kernend - (vm_offset_t)(&edata)); 136 137 mips_postboot_fixup(); 138 139 /* Initialize pcpu stuff */ 140 mips_pcpu0_init(); 141 142 cninit(); 143 mips_init(); 144 /* Set counter_freq for tick_init_params() */ 145 platform_counter_freq = 175 * 1000 * 1000; 146 147 mips_timer_init_params(platform_counter_freq, 0); 148} 149