Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 25 Aug 2010 12:10:21 +0000 (UTC)
From:      "Jayachandran C." <jchandra@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r211812 - head/sys/mips/rmi
Message-ID:  <201008251210.o7PCALXt010953@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jchandra
Date: Wed Aug 25 12:10:20 2010
New Revision: 211812
URL: http://svn.freebsd.org/changeset/base/211812

Log:
  XLR PIC code update.
  - Fix a bug in xlr_pic_init (use irq in PIC_IRQ_IS_EDGE_TRIGGERED)
  - use new macro PIC_INTR_TO_IRQ() and PIC_IRT_x() in xlr_pic_init

Modified:
  head/sys/mips/rmi/pic.h
  head/sys/mips/rmi/xlr_machdep.c

Modified: head/sys/mips/rmi/pic.h
==============================================================================
--- head/sys/mips/rmi/pic.h	Wed Aug 25 11:49:48 2010	(r211811)
+++ head/sys/mips/rmi/pic.h	Wed Aug 25 12:10:20 2010	(r211812)
@@ -93,7 +93,6 @@
 #define	PIC_TIMER_COUNT_0_BASE		0x120
 #define	PIC_TIMER_COUNT_1_BASE		0x130
 
-
 #define	PIC_IRT_0(picintr)	(PIC_IRT_0_BASE + (picintr))
 #define	PIC_IRT_1(picintr)	(PIC_IRT_1_BASE + (picintr))
 
@@ -102,7 +101,14 @@
 #define	PIC_TIMER_COUNT_0(i)	(PIC_TIMER_COUNT_0_BASE + (i))
 #define	PIC_TIMER_COUNT_1(i)	(PIC_TIMER_COUNT_0_BASE + (i))
 
+/*
+ * We use a simple mapping form PIC interrupts to CPU IRQs.
+ * The PIC interrupts 0-31 are mapped to CPU irq's 8-39.
+ * this leaves the lower 0-7 for the cpu interrupts (like 
+ * count/compare, msgrng) and 40-63 for IPIs
+ */
 #define	PIC_IRQ_BASE		8
+#define	PIC_INTR_TO_IRQ(i)	(PIC_IRQ_BASE + (i))
 #define	PIC_IRT_FIRST_IRQ	PIC_IRQ_BASE
 
 #define	PIC_WD_IRQ		(PIC_IRQ_BASE + PIC_IRT_WD_INDEX)

Modified: head/sys/mips/rmi/xlr_machdep.c
==============================================================================
--- head/sys/mips/rmi/xlr_machdep.c	Wed Aug 25 11:49:48 2010	(r211811)
+++ head/sys/mips/rmi/xlr_machdep.c	Wed Aug 25 12:10:20 2010	(r211812)
@@ -282,22 +282,23 @@ static void 
 xlr_pic_init(void)
 {
 	xlr_reg_t *mmio = xlr_io_mmio(XLR_IO_PIC_OFFSET);
-	int i, level;
+	int i, level, irq;
 
 	mtx_init(&xlr_pic_lock, "pic", NULL, MTX_SPIN);
 	xlr_write_reg(mmio, PIC_CTRL, 0);
 	for (i = 0; i < PIC_NUM_IRTS; i++) {
-		level = PIC_IRQ_IS_EDGE_TRIGGERED(i);
+		irq = PIC_INTR_TO_IRQ(i);
+		level = PIC_IRQ_IS_EDGE_TRIGGERED(irq);
 
 		/* Bind all PIC irqs to cpu 0 */
-		xlr_write_reg(mmio, PIC_IRT_0_BASE + i, 0x01);
+		xlr_write_reg(mmio, PIC_IRT_0(i), 0x01);
 
 		/*
 		 * Use local scheduling and high polarity for all IRTs
 		 * Invalidate all IRTs, by default
 		 */
-		xlr_write_reg(mmio, PIC_IRT_1_BASE + i, (level << 30) | (1 << 6) |
-		    (PIC_IRQ_BASE + i));
+		xlr_write_reg(mmio, PIC_IRT_1(i), (level << 30) | (1 << 6) |
+		    irq);
 	}
 }
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201008251210.o7PCALXt010953>