summaryrefslogtreecommitdiffstats
path: root/sys/mips/mips/mpboot.S
diff options
context:
space:
mode:
authorneel <neel@FreeBSD.org>2010-02-09 06:24:43 +0000
committerneel <neel@FreeBSD.org>2010-02-09 06:24:43 +0000
commit91212ae23c60e92beb6a2bf31304fe0f44d84cee (patch)
tree6b8fc2551b36316f7e2c7437b3ef3de98dbabfb2 /sys/mips/mips/mpboot.S
parent764ce56acec6e1b162434305a36821de3b6e3ded (diff)
downloadFreeBSD-src-91212ae23c60e92beb6a2bf31304fe0f44d84cee.zip
FreeBSD-src-91212ae23c60e92beb6a2bf31304fe0f44d84cee.tar.gz
SMP support for the mips port.
The platform that supports SMP currently is a SWARM with a dual-core Sibyte processor. The kernel config file to use is SWARM_SMP. Reviewed by: imp, rrs
Diffstat (limited to 'sys/mips/mips/mpboot.S')
-rw-r--r--sys/mips/mips/mpboot.S72
1 files changed, 72 insertions, 0 deletions
diff --git a/sys/mips/mips/mpboot.S b/sys/mips/mips/mpboot.S
new file mode 100644
index 0000000..6828847
--- /dev/null
+++ b/sys/mips/mips/mpboot.S
@@ -0,0 +1,72 @@
+/*-
+ * Copyright (c) 2010 Neelkanth Natu
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#include <machine/asm.h>
+#include <machine/cpu.h>
+#include <machine/cpuregs.h>
+
+#include "assym.s"
+
+ .text
+ .set noat
+ .set noreorder
+
+GLOBAL(mpentry)
+ mtc0 zero, COP_0_STATUS_REG /* disable interrupts */
+
+ mtc0 zero, COP_0_CAUSE_REG /* clear soft interrupts */
+
+ li t0, CFG_K0_CACHED /* make sure kseg0 is cached */
+ mtc0 t0, MIPS_COP_0_CONFIG
+ COP0_SYNC
+
+ jal platform_processor_id /* get the processor number */
+ nop
+ move s0, v0
+
+ /*
+ * Initialize stack and call machine startup
+ */
+ PTR_LA sp, _C_LABEL(pcpu_space)
+ addiu sp, (NBPG * 2) - START_FRAME
+ sll t0, s0, PAGE_SHIFT + 1
+ addu sp, sp, t0
+
+ /* Zero out old ra and old fp for debugger */
+ sw zero, START_FRAME - 4(sp)
+ sw zero, START_FRAME - 8(sp)
+
+ PTR_LA gp, _C_LABEL(_gp)
+
+ jal platform_init_ap
+ move a0, s0
+
+ jal smp_init_secondary
+ move a0, s0
+
+ PANIC("AP startup failed!")
OpenPOWER on IntegriCloud