Module Name:    src
Committed By:   skrll
Date:           Sun Apr 12 17:32:39 UTC 2015

Modified Files:
        src/sys/arch/arm/broadcom: bcm2835_intr.c bcm2835_intr.h bcm2835_obio.c
            bcm2835reg.h
        src/sys/arch/evbarm/rpi: rpi_machdep.c

Log Message:
RPI2 MP support.

Thanks to Matt Thomas for making this possible with his changes to pic.c


To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/arm/broadcom/bcm2835_intr.c
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/broadcom/bcm2835_intr.h
cvs rdiff -u -r1.24 -r1.25 src/sys/arch/arm/broadcom/bcm2835_obio.c
cvs rdiff -u -r1.14 -r1.15 src/sys/arch/arm/broadcom/bcm2835reg.h
cvs rdiff -u -r1.60 -r1.61 src/sys/arch/evbarm/rpi/rpi_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/arm/broadcom/bcm2835_intr.c
diff -u src/sys/arch/arm/broadcom/bcm2835_intr.c:1.7 src/sys/arch/arm/broadcom/bcm2835_intr.c:1.8
--- src/sys/arch/arm/broadcom/bcm2835_intr.c:1.7	Thu Mar  5 14:27:25 2015
+++ src/sys/arch/arm/broadcom/bcm2835_intr.c	Sun Apr 12 17:32:39 2015
@@ -1,7 +1,7 @@
-/*	$NetBSD: bcm2835_intr.c,v 1.7 2015/03/05 14:27:25 skrll Exp $	*/
+/*	$NetBSD: bcm2835_intr.c,v 1.8 2015/04/12 17:32:39 skrll Exp $	*/
 
 /*-
- * Copyright (c) 2012 The NetBSD Foundation, Inc.
+ * Copyright (c) 2012, 2015 The NetBSD Foundation, Inc.
  * All rights reserved.
  *
  * This code is derived from software contributed to The NetBSD Foundation
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bcm2835_intr.c,v 1.7 2015/03/05 14:27:25 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bcm2835_intr.c,v 1.8 2015/04/12 17:32:39 skrll Exp $");
 
 #define _INTR_PRIVATE
 
@@ -67,21 +67,12 @@ static int bcm2836mp_pic_find_pending_ir
 static void bcm2836mp_pic_establish_irq(struct pic_softc *, struct intrsource *);
 static void bcm2836mp_pic_source_name(struct pic_softc *, int, char *,
     size_t);
-#if 0
 #ifdef MULTIPROCESSOR
 int bcm2836mp_ipi_handler(void *);
 static void bcm2836mp_cpu_init(struct pic_softc *, struct cpu_info *);
 static void bcm2836mp_send_ipi(struct pic_softc *, const kcpuset_t *, u_long);
 #endif
 #endif
-#endif
-
-#ifdef MULTIPROCESSOR
-static void
-bcm2835_dummy(struct pic_softc *pic, const kcpuset_t *kcp, u_long ipi)
-{
-}
-#endif
 
 static int  bcm2835_icu_match(device_t, cfdata_t, void *);
 static void bcm2835_icu_attach(device_t, device_t, void *);
@@ -92,9 +83,6 @@ static struct pic_ops bcm2835_picops = {
 	.pic_find_pending_irqs = bcm2835_pic_find_pending_irqs,
 	.pic_establish_irq = bcm2835_pic_establish_irq,
 	.pic_source_name = bcm2835_pic_source_name,
-#if defined(MULTIPROCESSOR)
-	.pic_ipi_send = bcm2835_dummy,
-#endif
 };
 
 struct pic_softc bcm2835_pic = {
@@ -110,16 +98,33 @@ static struct pic_ops bcm2836mp_picops =
 	.pic_find_pending_irqs = bcm2836mp_pic_find_pending_irqs,
 	.pic_establish_irq = bcm2836mp_pic_establish_irq,
 	.pic_source_name = bcm2836mp_pic_source_name,
-#if 0 && defined(MULTIPROCESSOR)
+#if defined(MULTIPROCESSOR)
 	.pic_cpu_init = bcm2836mp_cpu_init,
 	.pic_ipi_send = bcm2836mp_send_ipi,
 #endif
 };
 
-struct pic_softc bcm2836mp_pic = {
-	.pic_ops = &bcm2836mp_picops,
-	.pic_maxsources = BCM2836MP_NIRQ,
-	.pic_name = "bcm2836 mp pic",
+struct pic_softc bcm2836mp_pic[BCM2836_NCPUS] = {
+	[0] = {
+		.pic_ops = &bcm2836mp_picops,
+		.pic_maxsources = BCM2836_NIRQPERCPU,
+		.pic_name = "bcm2836 pic",
+	},
+	[1] = {
+		.pic_ops = &bcm2836mp_picops,
+		.pic_maxsources = BCM2836_NIRQPERCPU,
+		.pic_name = "bcm2836 pic",
+	},
+	[2] = {
+		.pic_ops = &bcm2836mp_picops,
+		.pic_maxsources = BCM2836_NIRQPERCPU,
+		.pic_name = "bcm2836 pic",
+	},
+	[3] = {
+		.pic_ops = &bcm2836mp_picops,
+		.pic_maxsources = BCM2836_NIRQPERCPU,
+		.pic_name = "bcm2836 pic",
+	},
 };
 #endif
 
@@ -165,7 +170,7 @@ static const char * const bcm2835_source
 };
 
 #if defined(BCM2836)
-static const char * const bcm2836mp_sources[BCM2836MP_NIRQ] = {
+static const char * const bcm2836mp_sources[BCM2836_NIRQPERCPU] = {
 	"cntpsirq",	"cntpnsirq",	"cnthpirq",	"cntvirq",
 	"mailbox0",	"mailbox1",	"mailbox2",	"mailbox3",
 };
@@ -211,14 +216,14 @@ bcm2835_icu_attach(device_t parent, devi
 
 	bcmicu_sc = sc;
 
-	pic_add(sc->sc_pic, 0);
-
 #if defined(BCM2836)
-#if 0 && defined(MULTIPROCESSOR)
+#if defined(MULTIPROCESSOR)
 	aprint_normal(": Multiprocessor");
 #endif
-	pic_add(&bcm2836mp_pic, BCM2836_INT_LOCALBASE);
+
+	bcm2836mp_intr_init(curcpu());
 #endif
+	pic_add(sc->sc_pic, BCM2835_INT_BASE);
 
 	aprint_normal("\n");
 }
@@ -228,15 +233,18 @@ bcm2835_irq_handler(void *frame)
 {
 	struct cpu_info * const ci = curcpu();
 	const int oldipl = ci->ci_cpl;
+	const cpuid_t cpuid = ci->ci_cpuid;
 	const uint32_t oldipl_mask = __BIT(oldipl);
 	int ipl_mask = 0;
 
 	ci->ci_data.cpu_nintr++;
 
 	bcm2835_barrier();
-	ipl_mask = bcm2835_pic_find_pending_irqs(&bcm2835_pic);
+	if (cpuid == 0) {
+		ipl_mask = bcm2835_pic_find_pending_irqs(&bcm2835_pic);
+	}
 #if defined(BCM2836)
-	ipl_mask |= bcm2836mp_pic_find_pending_irqs(&bcm2836mp_pic);
+	ipl_mask |= bcm2836mp_pic_find_pending_irqs(&bcm2836mp_pic[cpuid]);
 #endif
 
 	/*
@@ -283,8 +291,8 @@ bcm2835_pic_find_pending_irqs(struct pic
 	gpu1irq = bpending & BCM2835_INTBIT_GPU1;
 
 	if (armirq) {
-		ipl |= pic_mark_pending_sources(pic, BCM2835_INT_BASICBASE,
-		    armirq);
+		ipl |= pic_mark_pending_sources(pic,
+		    BCM2835_INT_BASICBASE - BCM2835_INT_BASE, armirq);
 
 	}
 
@@ -292,15 +300,15 @@ bcm2835_pic_find_pending_irqs(struct pic
 		uint32_t pending1;
 
 		pending1 = read_bcm2835reg(BCM2835_INTC_IRQ1PENDING);
-		ipl |= pic_mark_pending_sources(pic, BCM2835_INT_GPU0BASE,
-		    pending1);
+		ipl |= pic_mark_pending_sources(pic,
+		    BCM2835_INT_GPU0BASE - BCM2835_INT_BASE, pending1);
 	}
 	if (gpu1irq || (bpending & BCM2835_INTBIT_PENDING2)) {
 		uint32_t pending2;
 
 		pending2 = read_bcm2835reg(BCM2835_INTC_IRQ2PENDING);
-		ipl |= pic_mark_pending_sources(pic, BCM2835_INT_GPU1BASE,
-		    pending2);
+		ipl |= pic_mark_pending_sources(pic,
+		    BCM2835_INT_GPU1BASE - BCM2835_INT_BASE, pending2);
 	}
 
 	return ipl;
@@ -329,15 +337,17 @@ bcm2835_pic_source_name(struct pic_softc
 #define	BCM2836MP_MAILBOX_IRQS	__BITS(4,4)
 
 #define	BCM2836MP_ALL_IRQS	\
-     (BCM2836MP_TIMER_IRQS | BCM2836MP_MAILBOX_IRQS)
+    (BCM2836MP_TIMER_IRQS | BCM2836MP_MAILBOX_IRQS)
 
 static void
 bcm2836mp_pic_unblock_irqs(struct pic_softc *pic, size_t irqbase,
     uint32_t irq_mask)
 {
-	const int cpuid = 0;
+	struct cpu_info * const ci = curcpu();
+	const cpuid_t cpuid = ci->ci_cpuid;
 
-//printf("%s: irqbase %zu irq_mask %08x\n", __func__, irqbase, irq_mask);
+	KASSERT(pic == &bcm2836mp_pic[cpuid]);
+	KASSERT(irqbase == 0);
 
 	if (irq_mask & BCM2836MP_TIMER_IRQS) {
 		uint32_t mask = __SHIFTOUT(irq_mask, BCM2836MP_TIMER_IRQS);
@@ -351,7 +361,6 @@ bcm2836mp_pic_unblock_irqs(struct pic_so
 		    BCM2836_LOCAL_TIMER_IRQ_CONTROL_BASE,
 		    BCM2836_LOCAL_TIMER_IRQ_CONTROL_SIZE,
 		    BUS_SPACE_BARRIER_READ|BUS_SPACE_BARRIER_WRITE);
-//printf("%s: val %08x\n", __func__, val);
 	} else if (irq_mask & BCM2836MP_MAILBOX_IRQS) {
 		uint32_t mask = __SHIFTOUT(irq_mask, BCM2836MP_MAILBOX_IRQS);
 		uint32_t val = bus_space_read_4(al_iot, al_ioh,
@@ -373,9 +382,12 @@ static void
 bcm2836mp_pic_block_irqs(struct pic_softc *pic, size_t irqbase,
     uint32_t irq_mask)
 {
-	const int cpuid = 0;
+	struct cpu_info * const ci = curcpu();
+	const cpuid_t cpuid = ci->ci_cpuid;
+
+	KASSERT(pic == &bcm2836mp_pic[cpuid]);
+	KASSERT(irqbase == 0);
 
-//printf("%s: irqbase %zu irq_mask %08x\n", __func__, irqbase, irq_mask);
 	if (irq_mask & BCM2836MP_TIMER_IRQS) {
 		uint32_t mask = __SHIFTOUT(irq_mask, BCM2836MP_TIMER_IRQS);
 		uint32_t val = bus_space_read_4(al_iot, al_ioh,
@@ -384,7 +396,6 @@ bcm2836mp_pic_block_irqs(struct pic_soft
 		bus_space_write_4(al_iot, al_ioh,
 		    BCM2836_LOCAL_TIMER_IRQ_CONTROLN(cpuid),
 		    val);
-//printf("%s: val %08x\n", __func__, val);
 	} else if (irq_mask & BCM2836MP_MAILBOX_IRQS) {
 		uint32_t mask = __SHIFTOUT(irq_mask, BCM2836MP_MAILBOX_IRQS);
 		uint32_t val = bus_space_read_4(al_iot, al_ioh,
@@ -399,14 +410,16 @@ bcm2836mp_pic_block_irqs(struct pic_soft
 	return;
 }
 
-
 static int
 bcm2836mp_pic_find_pending_irqs(struct pic_softc *pic)
 {
-	const int cpuid = 0;
+	struct cpu_info * const ci = curcpu();
+	const cpuid_t cpuid = ci->ci_cpuid;
 	uint32_t lpending;
 	int ipl = 0;
 
+	KASSERT(pic == &bcm2836mp_pic[cpuid]);
+
 	bcm2835_barrier();
 
 	lpending = bus_space_read_4(al_iot, al_ioh,
@@ -424,19 +437,99 @@ bcm2836mp_pic_find_pending_irqs(struct p
 static void
 bcm2836mp_pic_establish_irq(struct pic_softc *pic, struct intrsource *is)
 {
-
 	/* Nothing really*/
 	KASSERT(is->is_irq >= 0);
-	KASSERT(is->is_irq < BCM2836MP_NIRQ);
-//	KASSERT(is->is_type == IST_LEVEL);
-
-
+	KASSERT(is->is_irq < BCM2836_NIRQPERCPU);
 }
 
 static void
 bcm2836mp_pic_source_name(struct pic_softc *pic, int irq, char *buf, size_t len)
 {
-	irq %= 32;
+
+	irq %= BCM2836_NIRQPERCPU;
 	strlcpy(buf, bcm2836mp_sources[irq], len);
 }
+
+
+#ifdef MULTIPROCESSOR
+static void bcm2836mp_cpu_init(struct pic_softc *pic, struct cpu_info *ci)
+{
+
+	/* Enable IRQ and not FIQ */
+	bus_space_write_4(al_iot, al_ioh,
+	    BCM2836_LOCAL_MAILBOX_IRQ_CONTROLN(ci->ci_cpuid), 1);
+}
+
+
+static void
+bcm2836mp_send_ipi(struct pic_softc *pic, const kcpuset_t *kcp, u_long ipi)
+{
+	const cpuid_t cpuid = pic - &bcm2836mp_pic[0];
+
+	bus_space_write_4(al_iot, al_ioh,
+	    BCM2836_LOCAL_MAILBOX0_SETN(cpuid), ipi);
+}
+
+int
+bcm2836mp_ipi_handler(void *priv)
+{
+	const struct cpu_info *ci = curcpu();
+	const cpuid_t cpuid = ci->ci_cpuid;
+	const uint32_t ipi = bus_space_read_4(al_iot, al_ioh,
+	    BCM2836_LOCAL_MAILBOX0_CLRN(cpuid));
+
+	bus_space_write_4(al_iot, al_ioh, BCM2836_LOCAL_MAILBOX0_CLRN(cpuid),
+	    ipi);
+
+	switch (ipi) {
+	case IPI_AST:
+	case IPI_NOP:
+		pic_ipi_nop(priv);
+		break;
+	case IPI_XCALL:
+		pic_ipi_xcall(priv);
+		break;
+	case IPI_GENERIC:
+		pic_ipi_generic(priv);
+		break;
+	case IPI_SHOOTDOWN:
+		pic_ipi_shootdown(priv);
+		break;
+#ifdef DDB
+	case IPI_DDB:
+		pic_ipi_ddb(priv);
+		break;
+#endif
+#ifdef __HAVE_PREEMPTION
+	case IPI_KPREEMPT:
+		pic_ipi_nop(priv);
+		break;
+#endif
+	}
+
+	return 1;
+}
+
+void
+bcm2836mp_intr_init(struct cpu_info *ci)
+{
+	const cpuid_t cpuid = ci->ci_cpuid;
+	struct pic_softc * const pic = &bcm2836mp_pic[cpuid];
+
+	pic->pic_cpus = ci->ci_kcpuset;
+	pic_add(pic, BCM2836_INT_BASECPUN(cpuid));
+
+	intr_establish(BCM2836_INT_MAILBOX0_CPUN(cpuid), IPL_VM,
+	    IST_LEVEL | IST_MPSAFE, bcm2836mp_ipi_handler, NULL);
+
+	/* clock interrupt will attach with gtmr */
+	if (cpuid == 0)
+		return;
+
+	intr_establish(BCM2836_INT_CNTVIRQ_CPUN(cpuid), IPL_CLOCK,
+	    IST_LEVEL | IST_MPSAFE, gtmr_intr, NULL);
+
+}
+#endif
+
 #endif

Index: src/sys/arch/arm/broadcom/bcm2835_intr.h
diff -u src/sys/arch/arm/broadcom/bcm2835_intr.h:1.1 src/sys/arch/arm/broadcom/bcm2835_intr.h:1.2
--- src/sys/arch/arm/broadcom/bcm2835_intr.h:1.1	Thu Jul 26 06:21:57 2012
+++ src/sys/arch/arm/broadcom/bcm2835_intr.h	Sun Apr 12 17:32:39 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: bcm2835_intr.h,v 1.1 2012/07/26 06:21:57 skrll Exp $	*/
+/*	$NetBSD: bcm2835_intr.h,v 1.2 2015/04/12 17:32:39 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -38,8 +38,8 @@
 
 void bcm2835_irq_handler(void *);
 
-#define PIC_MAXSOURCES 96
-#define PIC_MAXMAXSOURCES 128
+#define PIC_MAXSOURCES 96 + (4*32)
+#define PIC_MAXMAXSOURCES 96 + (4*32) + 32
 
 #include <arm/pic/picvar.h>
 
@@ -50,6 +50,8 @@ bcm2835_intr_establish(int irq, int ipl,
 	return intr_establish(irq, ipl, IST_LEVEL, func, arg);
 }
 
+void bcm2836mp_intr_init(struct cpu_info *);
+
 #endif	/* _LOCORE */
 
 #endif /* _BCM2835_INTR_H_ */

Index: src/sys/arch/arm/broadcom/bcm2835_obio.c
diff -u src/sys/arch/arm/broadcom/bcm2835_obio.c:1.24 src/sys/arch/arm/broadcom/bcm2835_obio.c:1.25
--- src/sys/arch/arm/broadcom/bcm2835_obio.c:1.24	Wed Mar  4 17:02:17 2015
+++ src/sys/arch/arm/broadcom/bcm2835_obio.c	Sun Apr 12 17:32:39 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: bcm2835_obio.c,v 1.24 2015/03/04 17:02:17 skrll Exp $	*/
+/*	$NetBSD: bcm2835_obio.c,v 1.25 2015/04/12 17:32:39 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2012, 2014 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bcm2835_obio.c,v 1.24 2015/03/04 17:02:17 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bcm2835_obio.c,v 1.25 2015/04/12 17:32:39 skrll Exp $");
 
 #include "locators.h"
 #include "obio.h"
@@ -38,10 +38,10 @@ __KERNEL_RCSID(0, "$NetBSD: bcm2835_obio
 #include "opt_bcm283x.h"
 
 #include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/device.h>
-
 #include <sys/bus.h>
+#include <sys/cpu.h>
+#include <sys/device.h>
+#include <sys/systm.h>
 
 #include <arm/broadcom/bcm2835reg.h>
 #include <arm/broadcom/bcm2835var.h>
@@ -262,7 +262,6 @@ obio_attach(device_t parent, device_t se
 				.mpcaa_irq = ad->ad_intr,
 			};
 
-
 			config_found(self, &mpcaa, NULL);
 			continue;
 		}
@@ -314,5 +313,9 @@ obio_print(void *aux, const char *name)
 void
 bcm2836_cpu_hatch(struct cpu_info *ci)
 {
+
+	bcm2836mp_intr_init(ci);
+
+	gtmr_init_cpu_clock(ci);
 }
 #endif

Index: src/sys/arch/arm/broadcom/bcm2835reg.h
diff -u src/sys/arch/arm/broadcom/bcm2835reg.h:1.14 src/sys/arch/arm/broadcom/bcm2835reg.h:1.15
--- src/sys/arch/arm/broadcom/bcm2835reg.h:1.14	Sat Feb 28 09:34:34 2015
+++ src/sys/arch/arm/broadcom/bcm2835reg.h	Sun Apr 12 17:32:39 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: bcm2835reg.h,v 1.14 2015/02/28 09:34:34 skrll Exp $	*/
+/*	$NetBSD: bcm2835reg.h,v 1.15 2015/04/12 17:32:39 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -83,7 +83,7 @@
 #define	BCM2835_USB_SIZE	0x20000
 #define	BCM2835_DMA15_SIZE	0x100
 
-#define BCM2835_IOPHYSTOVIRT(a) \
+#define	BCM2835_IOPHYSTOVIRT(a) \
     ((0xf0000000 | (((a) & 0xf0000000) >> 4)) + ((a) & ~0xff000000))
 
 #define	BCM2835_BUSADDR_CACHE_MASK	0xc0000000
@@ -127,8 +127,40 @@
 #define	BCM2835_INTC_ENABLEBASE		(BCM2835_INTC_BASE + 0x10)
 #define	BCM2835_INTC_DISABLEBASE	(BCM2835_INTC_BASE + 0x1c)
 
-/* Interrupt source */
-#define	BCM2835_INT_GPU0BASE		0
+#if defined(BCM2836)
+#define	BCM2836_NCPUS			4
+#define	BCM2836_NIRQPERCPU		32
+
+#define	BCM2836_INT_LOCALBASE		0
+#define	BCM2836_INT_BASECPUN(n)		(BCM2836_INT_LOCALBASE + ((n) * BCM2836_NIRQPERCPU))
+#define	BCM2836_NIRQ			(BCM2836_NIRQPERCPU * BCM2836_NCPUS)
+
+#define	BCM2835_INT_BASE		BCM2836_NIRQ
+
+#define	BCM2836_INT_CNTPSIRQ		0
+#define	BCM2836_INT_CNTPNSIRQ		1
+#define	BCM2836_INT_CNTHPIRQ		2
+#define	BCM2836_INT_CNTVIRQ		3
+#define	BCM2836_INT_MAILBOX0		4
+#define	BCM2836_INT_MAILBOX1		5
+#define	BCM2836_INT_MAILBOX2		6
+#define	BCM2836_INT_MAILBOX3		7
+#define	BCM2836_INT_GPU_FAST		8
+#define	BCM2836_INT_PMU_FAST		9
+#define	BCM2836_INT_ZERO		10
+#define	BCM2836_INT_TIMER		11
+#define	BCM2836_INT_NLOCAL		12
+
+#define	BCM2836_INT_CNTVIRQ_CPUN(n)	(BCM2836_INT_BASECPUN(n) + BCM2836_INT_CNTVIRQ)
+#define	BCM2836_INT_MAILBOX0_CPUN(n)	(BCM2836_INT_BASECPUN(n) + BCM2836_INT_MAILBOX0)
+#else
+#define	BCM2835_INT_BASE		0
+#endif /* !BCM2836 */
+
+/* Periperal Interrupt sources */
+#define	BCM2835_NIRQ			96
+
+#define	BCM2835_INT_GPU0BASE		(BCM2835_INT_BASE + 0)
 #define	BCM2835_INT_TIMER0		(BCM2835_INT_GPU0BASE + 0)
 #define	BCM2835_INT_TIMER1		(BCM2835_INT_GPU0BASE + 1)
 #define	BCM2835_INT_TIMER2		(BCM2835_INT_GPU0BASE + 2)
@@ -140,7 +172,7 @@
 #define	BCM2835_INT_AUX			(BCM2835_INT_GPU0BASE + 29)
 #define	BCM2835_INT_ARM			(BCM2835_INT_GPU0BASE + 30)
 
-#define	BCM2835_INT_GPU1BASE		32
+#define	BCM2835_INT_GPU1BASE		(BCM2835_INT_BASE + 32)
 #define	BCM2835_INT_GPIO0		(BCM2835_INT_GPU1BASE + 17)
 #define	BCM2835_INT_GPIO1		(BCM2835_INT_GPU1BASE + 18)
 #define	BCM2835_INT_GPIO2		(BCM2835_INT_GPU1BASE + 19)
@@ -151,7 +183,7 @@
 #define	BCM2835_INT_UART0		(BCM2835_INT_GPU1BASE + 25)
 #define	BCM2835_INT_EMMC		(BCM2835_INT_GPU1BASE + 30)
 
-#define	BCM2835_INT_BASICBASE		64
+#define	BCM2835_INT_BASICBASE		(BCM2835_INT_BASE + 64)
 #define	BCM2835_INT_ARMTIMER		(BCM2835_INT_BASICBASE + 0)
 #define	BCM2835_INT_ARMMAILBOX		(BCM2835_INT_BASICBASE + 1)
 #define	BCM2835_INT_ARMDOORBELL0	(BCM2835_INT_BASICBASE + 2)
@@ -161,31 +193,8 @@
 #define	BCM2835_INT_ILLEGALTYPE0	(BCM2835_INT_BASICBASE + 6)
 #define	BCM2835_INT_ILLEGALTYPE1	(BCM2835_INT_BASICBASE + 7)
 
-#define	BCM2836_NCPUS			4
-
-#define	BCM2836_INT_LOCALBASE		96
-
-#define	BCM2836_INT_CNTPSIRQ		0
-#define	BCM2836_INT_CNTPNSIRQ		1
-#define	BCM2836_INT_CNTHPIRQ		2
-#define	BCM2836_INT_CNTVIRQ		3
-#define	BCM2836_INT_MAILBOX0		4
-#define	BCM2836_INT_MAILBOX1		5
-#define	BCM2836_INT_MAILBOX2		6
-#define	BCM2836_INT_MAILBOX3		7
-#define	BCM2836_INT_GPU_FAST		8
-#define	BCM2836_INT_PMU_FAST		9
-#define	BCM2836_INT_ZERO		10
-#define	BCM2836_INT_TIMER		11
-#define	BCM2836_INT_NLOCAL		12
-
-#define	BCM2836_INT_CNTVIRQ_CPUN(n)	(BCM2836_INT_LOCALBASE + ((n) * 32) + BCM2836_INT_CNTVIRQ)
-#define	BCM2836_INT_MAILBOX0_CPUN(n)	(BCM2836_INT_LOCALBASE + ((n) * 32) + BCM2836_INT_MAILBOX0)
-
-#define	BCM2835_NIRQ			96
-#define	BCM2836MP_NIRQ			32
 
-#define	BCM2835_UART0_CLK	3000000
+#define	BCM2835_UART0_CLK		3000000
 
 #define	BCM2836_ARM_LOCAL_VBASE \
 	BCM2835_IOPHYSTOVIRT(BCM2836_ARM_LOCAL_BASE)

Index: src/sys/arch/evbarm/rpi/rpi_machdep.c
diff -u src/sys/arch/evbarm/rpi/rpi_machdep.c:1.60 src/sys/arch/evbarm/rpi/rpi_machdep.c:1.61
--- src/sys/arch/evbarm/rpi/rpi_machdep.c:1.60	Sat Apr 11 15:29:58 2015
+++ src/sys/arch/evbarm/rpi/rpi_machdep.c	Sun Apr 12 17:32:39 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: rpi_machdep.c,v 1.60 2015/04/11 15:29:58 skrll Exp $	*/
+/*	$NetBSD: rpi_machdep.c,v 1.61 2015/04/12 17:32:39 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rpi_machdep.c,v 1.60 2015/04/11 15:29:58 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rpi_machdep.c,v 1.61 2015/04/12 17:32:39 skrll Exp $");
 
 #include "opt_arm_debug.h"
 #include "opt_bcm283x.h"
@@ -534,11 +534,6 @@ rpi_bootstrap(void)
 			    __func__, i);
 		}
 	}
-
-	/*
-	 * XXXNH: Disable non-boot CPUs for now
-	 */
-	arm_cpu_hatched = 0;
 #endif
 }
 

Reply via email to