diff options
-rw-r--r-- | sys/arch/luna88k/conf/GENERIC | 5 | ||||
-rw-r--r-- | sys/arch/luna88k/luna88k/locore.S | 28 | ||||
-rw-r--r-- | sys/arch/luna88k/luna88k/machdep.c | 36 | ||||
-rw-r--r-- | sys/arch/m88k/include/cpu.h | 4 |
4 files changed, 40 insertions, 33 deletions
diff --git a/sys/arch/luna88k/conf/GENERIC b/sys/arch/luna88k/conf/GENERIC index 8fadfc286af..b7376f7b24b 100644 --- a/sys/arch/luna88k/conf/GENERIC +++ b/sys/arch/luna88k/conf/GENERIC @@ -1,4 +1,4 @@ -# $OpenBSD: GENERIC,v 1.11 2005/09/06 19:21:55 miod Exp $ +# $OpenBSD: GENERIC,v 1.12 2007/01/12 21:41:53 aoyama Exp $ # # For further information on compiling OpenBSD kernels, see the config(8) # man page. @@ -16,6 +16,9 @@ maxusers 64 # estimated number of users # Processor type option M88100 # 88100 support; mandatory +# Number of maximum processors +option MAX_CPUS=4 # may have up to 4 processors + # Define this if your processor has the xxx.usr bug (mask C82N) option ERRATA__XXX_USR diff --git a/sys/arch/luna88k/luna88k/locore.S b/sys/arch/luna88k/luna88k/locore.S index 1922dce1cab..81a5477308a 100644 --- a/sys/arch/luna88k/luna88k/locore.S +++ b/sys/arch/luna88k/luna88k/locore.S @@ -1,4 +1,4 @@ -/* $OpenBSD: locore.S,v 1.12 2006/05/15 21:40:04 miod Exp $ */ +/* $OpenBSD: locore.S,v 1.13 2007/01/12 21:41:53 aoyama Exp $ */ /* * Copyright (c) 1998 Steve Murphree, Jr. * Copyright (c) 1996 Nivas Madhur @@ -169,7 +169,6 @@ ASLOCAL(main_start) bcnd eq0, r2, 3b br 1b /* looks clear -- try to grab */ 4: -#ifdef MULTIPROCESSOR /* now try to grab the master_mpu prize */ FLUSH_PIPELINE or.u r11, r0, hi16(_ASM_LABEL(master_mpu)) @@ -185,14 +184,6 @@ ASLOCAL(main_start) * We'll do that when we're ready for another CPU to go. */ bcnd ne0, r22, _ASM_LABEL(secondary_init) -#else - /* - * On non-MP kernels, the main processor will never release - * cpu_mutex, thus secondary processors will spin trying to - * acquire the lock, with interrupts disabled. - */ -#endif - /* fall through to main_init if that's appropriate */ /* * Main processor specific initialization (with cpu_mutex held). @@ -275,11 +266,11 @@ ASLOCAL(main_panic) text .align 8 -#ifdef MULTIPROCESSOR /* * Secondary processor specific initialization (with cpu_mutex held). */ ASLOCAL(secondary_init) +#ifdef MULTIPROCESSOR /* * While holding the cpu_mutex, the secondary cpu can use the slavestack * to call secondary_pre_main() to determine its cpu number. @@ -315,18 +306,24 @@ ASLOCAL(secondary_init) * be offered. */ br _ASM_LABEL(cpu_switch_search) +#else + + /* + * Just keep the processor chewing in silence. + */ +1: br 1b + +#endif /* MULTIPROCESSOR */ -GLOBAL(cpu_boot_secondary_processors) /* * Release the cpu_mutex; secondary processors will now have their * chance to initialize. */ +GLOBAL(cpu_boot_secondary_processors) or.u r2, r0, hi16(_ASM_LABEL(cpu_mutex)) jmp.n r1 st r0, r2, lo16(_ASM_LABEL(cpu_mutex)) -#endif /* MULTIPROCESSOR */ - /* * void delay(int count) * @@ -383,11 +380,10 @@ ASLOCAL(u0) GLOBAL(proc0paddr) word _ASM_LABEL(u0) /* KVA of proc0 uarea */ -#ifdef MULTIPROCESSOR /* The first processor that XMEMs this becomes the master */ ASLOCAL(master_mpu) word 0 -#endif + /* XMEM spin lock -- controls access to master_mpu */ ASLOCAL(cpu_mutex) word 0 diff --git a/sys/arch/luna88k/luna88k/machdep.c b/sys/arch/luna88k/luna88k/machdep.c index fd43ad9270f..f77aa0d8af4 100644 --- a/sys/arch/luna88k/luna88k/machdep.c +++ b/sys/arch/luna88k/luna88k/machdep.c @@ -1,4 +1,4 @@ -/* $OpenBSD: machdep.c,v 1.35 2006/11/18 22:58:25 miod Exp $ */ +/* $OpenBSD: machdep.c,v 1.36 2007/01/12 21:41:53 aoyama Exp $ */ /* * Copyright (c) 1998, 1999, 2000, 2001 Steve Murphree, Jr. * Copyright (c) 1996 Nivas Madhur @@ -1073,6 +1073,8 @@ luna88k_bootstrap() #endif cpuid_t cpu; extern void m8820x_initialize_cpu(cpuid_t); + extern void m8820x_set_sapr(cpuid_t, apr_t); + extern void cpu_boot_secondary_processors(void); cmmu = &cmmu8820x; @@ -1099,20 +1101,6 @@ luna88k_bootstrap() m88100_apply_patches(); /* - * On the luna88k, secondary processors are not disabled while the - * kernel is initializing. We just initialized the CMMUs tied to the - * currently-running CPU; initialize the others with similar settings - * here as well. - */ - for (cpu = 0; cpu < max_cpus; cpu++) { - if (cpu == master_cpu) - continue; - if (m88k_cpus[cpu].ci_alive == 0) - continue; - m8820x_initialize_cpu(cpu); - } - - /* * Now that set_cpu_number() set us with a valid cpu_info pointer, * we need to initialize p_addr and curpcb before autoconf, for the * fault handler to behave properly [except for badaddr() faults, @@ -1145,6 +1133,24 @@ luna88k_bootstrap() /* Initialize the "u-area" pages. */ bzero((caddr_t)curpcb, USPACE); + + /* + * On the luna88k, secondary processors are not disabled while the + * kernel is initializing. We just initialized the CMMUs tied to the + * currently-running CPU; initialize the others with similar settings + * as well, after calling pmap_bootstrap() above. + */ + for (cpu = 0; cpu < max_cpus; cpu++) { + if (cpu == master_cpu) + continue; + if (m88k_cpus[cpu].ci_alive == 0) + continue; + m8820x_initialize_cpu(cpu); + cmmu_set_sapr(cpu, kernel_pmap->pm_apr); + } + /* Release the cpu_mutex */ + cpu_boot_secondary_processors(); + #ifdef DEBUG printf("leaving luna88k_bootstrap()\n"); #endif diff --git a/sys/arch/m88k/include/cpu.h b/sys/arch/m88k/include/cpu.h index 3b7e7d57b6f..08b797c5372 100644 --- a/sys/arch/m88k/include/cpu.h +++ b/sys/arch/m88k/include/cpu.h @@ -1,4 +1,4 @@ -/* $OpenBSD: cpu.h,v 1.17 2006/12/24 20:30:35 miod Exp $ */ +/* $OpenBSD: cpu.h,v 1.18 2007/01/12 21:41:53 aoyama Exp $ */ /* * Copyright (c) 1996 Nivas Madhur * Copyright (c) 1992, 1993 @@ -65,9 +65,11 @@ #define MAX_CPUS 4 #endif #else +#if !defined(MAX_CPUS) #undef MAX_CPUS #define MAX_CPUS 1 #endif +#endif #ifndef _LOCORE |