Module Name: src
Committed By: matt
Date: Sun Feb 28 23:46:18 UTC 2010
Modified Files:
src/sys/arch/sbmips/sbmips [matt-nb5-mips64]: cpu.c machdep.c
Added Files:
src/sys/arch/sbmips/conf [matt-nb5-mips64]: GENERIC.MP GENERIC64.MP
Log Message:
Add MP versions of GENERIC and GENERIC64 (untested).
Start adding the MP bits for sbmips.
To generate a diff of this commit:
cvs rdiff -u -r0 -r1.1.2.1 src/sys/arch/sbmips/conf/GENERIC.MP \
src/sys/arch/sbmips/conf/GENERIC64.MP
cvs rdiff -u -r1.18.16.3 -r1.18.16.4 src/sys/arch/sbmips/sbmips/cpu.c
cvs rdiff -u -r1.38.10.6 -r1.38.10.7 src/sys/arch/sbmips/sbmips/machdep.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/sbmips/sbmips/cpu.c
diff -u src/sys/arch/sbmips/sbmips/cpu.c:1.18.16.3 src/sys/arch/sbmips/sbmips/cpu.c:1.18.16.4
--- src/sys/arch/sbmips/sbmips/cpu.c:1.18.16.3 Wed Jan 13 21:16:13 2010
+++ src/sys/arch/sbmips/sbmips/cpu.c Sun Feb 28 23:46:18 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: cpu.c,v 1.18.16.3 2010/01/13 21:16:13 matt Exp $ */
+/* $NetBSD: cpu.c,v 1.18.16.4 2010/02/28 23:46:18 matt Exp $ */
/*
* Copyright 2000, 2001
@@ -33,7 +33,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.18.16.3 2010/01/13 21:16:13 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.18.16.4 2010/02/28 23:46:18 matt Exp $");
#include "opt_multiprocessor.h"
@@ -83,26 +83,16 @@
static void
cpu_attach(device_t parent, device_t self, void *aux)
{
- struct cpu_info * const ci = curcpu();
+ struct cpu_info *ci;
const char * const xname = device_xname(self);
int plldiv;
uint32_t config;
- /* XXX this code must run on the target CPU */
- config = mips3_cp0_config_read();
- config &= ~MIPS3_CONFIG_K0_MASK;
- config |= 0x05; /* XXX. cacheable coherent */
- mips3_cp0_config_write(config);
-
found++;
- /*
- * Flush all of the caches, so that any lines marked non-coherent will
- * be flushed. Don't need to worry about L2; it's always
- * coherent (XXX???).
- */
- mips_icache_sync_all();
- mips_dcache_wbinv_all();
+ /* XXX this code must run on the target CPU */
+ config = mips3_cp0_config_read();
+ KASSERT((config & MIPS3_CONFIG_K0_MASK) == 5);
/* Determine CPU frequency */
@@ -118,30 +108,36 @@
aprint_normal("%s", xname);
}
- ci->ci_cpu_freq = 50000000 * plldiv;
- /* Compute the delay divisor. */
- ci->ci_divisor_delay = (ci->ci_cpu_freq + 500000) / 1000000;
- /* Compute clock cycles per hz */
- ci->ci_cycles_per_hz = (ci->ci_cpu_freq + hz / 2 ) / hz;
-
- aprint_normal(": %lu.%02luMHz (hz cycles = %lu, delay divisor = %lu)\n",
- ci->ci_cpu_freq / 1000000,
- (ci->ci_cpu_freq % 1000000) / 10000,
- ci->ci_cycles_per_hz, ci->ci_divisor_delay);
-
- /*
- * If we're the primary CPU, no more work to do; we're already
- * running!
- */
if (found == 1) {
+ ci = curcpu();
+ ci->ci_cpu_freq = 50000000 * plldiv;
+ /* Compute the delay divisor. */
+ ci->ci_divisor_delay = (ci->ci_cpu_freq + 500000) / 1000000;
+ /* Compute clock cycles per hz */
+ ci->ci_cycles_per_hz = (ci->ci_cpu_freq + hz / 2 ) / hz;
+
+ aprint_normal(": %lu.%02luMHz (hz cycles = %lu, delay divisor = %lu)\n",
+ ci->ci_cpu_freq / 1000000,
+ (ci->ci_cpu_freq % 1000000) / 10000,
+ ci->ci_cycles_per_hz, ci->ci_divisor_delay);
+
+ /*
+ * If we're the primary CPU, no more work to do; we're already
+ * running!
+ */
aprint_normal("%s: ", xname);
cpu_identify(self);
} else {
#if defined(MULTIPROCESSOR)
-# error!
+ ci = cpu_info_alloc(NULL, found);
+ KASSERT(ci);
+ // * spinup
#else
aprint_normal("%s: processor off-line; multiprocessor support "
"not present in kernel\n", xname);
+ return;
#endif
}
+
+ cpu_attach_common(self, ci);
}
Index: src/sys/arch/sbmips/sbmips/machdep.c
diff -u src/sys/arch/sbmips/sbmips/machdep.c:1.38.10.6 src/sys/arch/sbmips/sbmips/machdep.c:1.38.10.7
--- src/sys/arch/sbmips/sbmips/machdep.c:1.38.10.6 Mon Feb 1 04:18:31 2010
+++ src/sys/arch/sbmips/sbmips/machdep.c Sun Feb 28 23:46:18 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.38.10.6 2010/02/01 04:18:31 matt Exp $ */
+/* $NetBSD: machdep.c,v 1.38.10.7 2010/02/28 23:46:18 matt Exp $ */
/*
* Copyright 2000, 2001
@@ -58,7 +58,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.38.10.6 2010/02/01 04:18:31 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.38.10.7 2010/02/28 23:46:18 matt Exp $");
#include "opt_ddb.h"
#include "opt_ddbparam.h" /* for SYMTAB_SPACE */
@@ -344,6 +344,10 @@
Debugger();
#endif
}
+
+#ifdef MULTIPROCESSOR
+ mips_fixup_exceptions(mips_fixup_zero_relative);
+#endif
}
/*
@@ -352,32 +356,10 @@
void
cpu_startup(void)
{
- vaddr_t minaddr, maxaddr;
- char pbuf[9];
-
- /*
- * Good {morning,afternoon,evening,night}.
- */
- printf("%s%s", copyright, version);
- format_bytes(pbuf, sizeof(pbuf), ctob(physmem));
- printf("total memory = %s\n", pbuf);
-
- minaddr = 0;
- /*
- * Allocate a submap for physio.
- */
- phys_map = uvm_km_suballoc(kernel_map, &minaddr, &maxaddr, VM_PHYS_SIZE,
- 0, false, NULL);
-
-
/*
- * (No need to allocate an mbuf cluster submap. Mbuf clusters
- * are allocated via the pool allocator, and we use KSEG to
- * map those pages.)
+ * Just do the common stuff.
*/
-
- format_bytes(pbuf, sizeof(pbuf), ptoa(uvmexp.free));
- printf("avail memory = %s\n", pbuf);
+ cpu_startup_common();
}
int waittime = -1;
@@ -470,6 +452,8 @@
{
int rv;
+ rv = 2; /* Uncached. */
+
/* Check each DRAM region. */
if ((pa >= 0x0000000000 && pa <= 0x000fffffff) || /* DRAM 0 */
(pa >= 0x0080000000 && pa <= 0x008fffffff) || /* DRAM 1 */
@@ -480,10 +464,7 @@
#endif
0) {
rv = 5; /* Cacheable coherent. */
- goto done;
}
- rv = 2; /* Uncached. */
-done:
return (rv);
}
Added files:
Index: src/sys/arch/sbmips/conf/GENERIC.MP
diff -u /dev/null src/sys/arch/sbmips/conf/GENERIC.MP:1.1.2.1
--- /dev/null Sun Feb 28 23:46:18 2010
+++ src/sys/arch/sbmips/conf/GENERIC.MP Sun Feb 28 23:46:18 2010
@@ -0,0 +1,11 @@
+
+include "arch/sbmips/conf/GENERIC"
+
+options MULTIPROCESSOR
+options LOCKDEBUG
+
+pseudo-device lockstat
+
+no options SYMTAB_SPACE
+options SYMTAB_SPACE=640000
+
Index: src/sys/arch/sbmips/conf/GENERIC64.MP
diff -u /dev/null src/sys/arch/sbmips/conf/GENERIC64.MP:1.1.2.1
--- /dev/null Sun Feb 28 23:46:18 2010
+++ src/sys/arch/sbmips/conf/GENERIC64.MP Sun Feb 28 23:46:18 2010
@@ -0,0 +1,11 @@
+
+include "arch/sbmips/conf/GENERIC64"
+
+options MULTIPROCESSOR
+options LOCKDEBUG
+
+pseudo-device lockstat
+
+no options SYMTAB_SPACE
+options SYMTAB_SPACE=640000
+