Module Name: src Committed By: matt Date: Wed Aug 29 23:16:35 UTC 2012
Modified Files: src/sys/arch/arm/conf: files.arm src/sys/arch/arm/mainbus: cpu_mainbus.c mainbus.c mainbus.h Log Message: Add core locator to mainbus. Add support for attaching multiple CPUs To generate a diff of this commit: cvs rdiff -u -r1.109 -r1.110 src/sys/arch/arm/conf/files.arm cvs rdiff -u -r1.12 -r1.13 src/sys/arch/arm/mainbus/cpu_mainbus.c cvs rdiff -u -r1.19 -r1.20 src/sys/arch/arm/mainbus/mainbus.c cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/mainbus/mainbus.h 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/arm/conf/files.arm diff -u src/sys/arch/arm/conf/files.arm:1.109 src/sys/arch/arm/conf/files.arm:1.110 --- src/sys/arch/arm/conf/files.arm:1.109 Wed Aug 29 07:14:04 2012 +++ src/sys/arch/arm/conf/files.arm Wed Aug 29 23:16:35 2012 @@ -1,4 +1,4 @@ -# $NetBSD: files.arm,v 1.109 2012/08/29 07:14:04 matt Exp $ +# $NetBSD: files.arm,v 1.110 2012/08/29 23:16:35 matt Exp $ # temporary define to allow easy moving to ../arch/arm/arm32 defflag ARM32 @@ -78,7 +78,7 @@ file arch/arm/arm/fiq.c file arch/arm/arm/fiq_subr.S # mainbus files -device mainbus { [base = -1], [size = 0], [dack = -1], [irq = -1], [intrbase = -1] } +device mainbus { [base = -1], [size = 0], [dack = -1], [irq = -1], [intrbase = -1], [core = -1] } attach mainbus at root file arch/arm/mainbus/mainbus.c mainbus & arm32 file arch/arm/mainbus/mainbus_io.c mainbus & arm32 Index: src/sys/arch/arm/mainbus/cpu_mainbus.c diff -u src/sys/arch/arm/mainbus/cpu_mainbus.c:1.12 src/sys/arch/arm/mainbus/cpu_mainbus.c:1.13 --- src/sys/arch/arm/mainbus/cpu_mainbus.c:1.12 Wed Aug 29 17:44:25 2012 +++ src/sys/arch/arm/mainbus/cpu_mainbus.c Wed Aug 29 23:16:35 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: cpu_mainbus.c,v 1.12 2012/08/29 17:44:25 matt Exp $ */ +/* $NetBSD: cpu_mainbus.c,v 1.13 2012/08/29 23:16:35 matt Exp $ */ /* * Copyright (c) 1995 Mark Brinicombe. @@ -41,24 +41,18 @@ * Created : 10/10/95 */ +#include "locators.h" + #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: cpu_mainbus.c,v 1.12 2012/08/29 17:44:25 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: cpu_mainbus.c,v 1.13 2012/08/29 23:16:35 matt Exp $"); #include <sys/param.h> #include <sys/systm.h> -#include <sys/malloc.h> +#include <sys/cpu.h> #include <sys/device.h> #include <sys/proc.h> -#if 0 -#include <sys/conf.h> -#include <uvm/uvm_extern.h> -#include <machine/io.h> -#endif -#include <machine/cpu.h> -#if 0 -#include <arm/cpus.h> -#include <arm/undefined.h> -#endif + +#include <arm/mainbus/mainbus.h> /* * Prototypes @@ -72,11 +66,38 @@ static void cpu_mainbus_attach(device_t, * Probe for the main cpu. Currently all this does is return 1 to * indicate that the cpu was found. */ +#ifdef MULTIPROCESSOR +extern u_int arm_cpu_max; +#else +#define arm_cpu_max 0 +#endif static int cpu_mainbus_match(device_t parent, cfdata_t cf, void *aux) { - return(1); + struct mainbus_attach_args * const mb = aux; + int id = mb->mb_core; + + if (id != MAINBUSCF_CORE_DEFAULT) { + if (id > arm_cpu_max || kcpuset_isset(kcpuset_attached, id)) + return 0; + if (id == 0 && cpu_info_store.ci_dev != NULL) + return 0; + return 1; + } + + for (id = 0; id <= arm_cpu_max; id++) { +#ifdef MULTIPROCESSOR + if (cpu_info[id] != NULL && cpu_info[id]->ci_dev != NULL) + continue; +#else + if (id != 0 || cpu_info_store.ci_dev != NULL) + continue; +#endif + mb->mb_core = id; + return 1; + } + return 0; } /* @@ -88,7 +109,9 @@ cpu_mainbus_match(device_t parent, cfdat static void cpu_mainbus_attach(device_t parent, device_t self, void *aux) { - cpu_attach(self, 0); + struct mainbus_attach_args * const mb = aux; + + cpu_attach(self, mb->mb_core); } CFATTACH_DECL_NEW(cpu_mainbus, 0, Index: src/sys/arch/arm/mainbus/mainbus.c diff -u src/sys/arch/arm/mainbus/mainbus.c:1.19 src/sys/arch/arm/mainbus/mainbus.c:1.20 --- src/sys/arch/arm/mainbus/mainbus.c:1.19 Sat Jul 14 07:57:26 2012 +++ src/sys/arch/arm/mainbus/mainbus.c Wed Aug 29 23:16:35 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: mainbus.c,v 1.19 2012/07/14 07:57:26 matt Exp $ */ +/* $NetBSD: mainbus.c,v 1.20 2012/08/29 23:16:35 matt Exp $ */ /* * Copyright (c) 1994,1995 Mark Brinicombe. @@ -42,7 +42,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: mainbus.c,v 1.19 2012/07/14 07:57:26 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: mainbus.c,v 1.20 2012/08/29 23:16:35 matt Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -110,6 +110,8 @@ mainbusprint(void *aux, const char *main aprint_normal(" irq %d", mb->mb_irq); if (mb->mb_drq != -1) aprint_normal(" drq 0x%08x", mb->mb_drq); + if (mb->mb_core != MAINBUSCF_CORE_DEFAULT) + aprint_normal(" core %d", mb->mb_core); /* XXXX print flags */ return (QUIET); @@ -142,6 +144,7 @@ mainbussearch(device_t parent, cfdata_t mb.mb_drq = cf->cf_loc[MAINBUSCF_DACK]; mb.mb_irq = cf->cf_loc[MAINBUSCF_IRQ]; } + mb.mb_core = cf->cf_loc[MAINBUSCF_CORE]; mb.mb_intrbase = cf->cf_loc[MAINBUSCF_INTRBASE]; mb.mb_iot = &mainbus_bs_tag; Index: src/sys/arch/arm/mainbus/mainbus.h diff -u src/sys/arch/arm/mainbus/mainbus.h:1.3 src/sys/arch/arm/mainbus/mainbus.h:1.4 --- src/sys/arch/arm/mainbus/mainbus.h:1.3 Sat Jul 14 07:57:26 2012 +++ src/sys/arch/arm/mainbus/mainbus.h Wed Aug 29 23:16:35 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: mainbus.h,v 1.3 2012/07/14 07:57:26 matt Exp $ */ +/* $NetBSD: mainbus.h,v 1.4 2012/08/29 23:16:35 matt Exp $ */ /* * Copyright (c) 1994,1995 Mark Brinicombe. @@ -53,6 +53,7 @@ struct mainbus_attach_args { int mb_irq; /* interrupt request */ int mb_drq; /* DMA request */ int mb_intrbase; /* interrupt numbering base */ + int mb_core; /* cpu core # */ void *mb_aux; /* driver specific */ bus_space_tag_t mb_iot; /* bus space tag */ };