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 */
 };

Reply via email to