summaryrefslogtreecommitdiffstats
path: root/sys/mips
diff options
context:
space:
mode:
authorgonzo <gonzo@FreeBSD.org>2012-03-24 06:28:15 +0000
committergonzo <gonzo@FreeBSD.org>2012-03-24 06:28:15 +0000
commitdf574149ee305ec2743ad783af3da228288518bd (patch)
tree0c5d734fa24f1a291cbe999d6498447e70f486a2 /sys/mips
parent774b43d526e3830afbec2c5181deafd6a8fe3b5e (diff)
downloadFreeBSD-src-df574149ee305ec2743ad783af3da228288518bd.zip
FreeBSD-src-df574149ee305ec2743ad783af3da228288518bd.tar.gz
Remap PMC interrupt for all cores
Diffstat (limited to 'sys/mips')
-rw-r--r--sys/mips/cavium/octeon_irq.h2
-rw-r--r--sys/mips/cavium/octeon_machdep.c10
-rw-r--r--sys/mips/cavium/octeon_pmc.c11
3 files changed, 12 insertions, 11 deletions
diff --git a/sys/mips/cavium/octeon_irq.h b/sys/mips/cavium/octeon_irq.h
index b755990..ee94956 100644
--- a/sys/mips/cavium/octeon_irq.h
+++ b/sys/mips/cavium/octeon_irq.h
@@ -176,4 +176,6 @@ typedef enum
/* Interrupts 129 - 135 are reserved */
} octeon_irq_t;
+#define OCTEON_PMC_IRQ OCTEON_IRQ_4
+
#endif
diff --git a/sys/mips/cavium/octeon_machdep.c b/sys/mips/cavium/octeon_machdep.c
index b860e97..57aa567 100644
--- a/sys/mips/cavium/octeon_machdep.c
+++ b/sys/mips/cavium/octeon_machdep.c
@@ -260,6 +260,8 @@ octeon_debug_symbol(void)
void
octeon_ciu_reset(void)
{
+ uint64_t cvmctl;
+
/* Disable all CIU interrupts by default */
cvmx_write_csr(CVMX_CIU_INTX_EN0(cvmx_get_core_num()*2), 0);
cvmx_write_csr(CVMX_CIU_INTX_EN0(cvmx_get_core_num()*2+1), 0);
@@ -272,6 +274,14 @@ octeon_ciu_reset(void)
(1ull << (OCTEON_IRQ_MBOX0 - 8)) |
(1ull << (OCTEON_IRQ_MBOX1 - 8)));
#endif
+
+ /*
+ * Move the Performance Counter interrupt to OCTEON_PMC_IRQ
+ */
+ cvmctl = mips_rd_cvmctl();
+ cvmctl &= ~(7 << 7);
+ cvmctl |= (OCTEON_PMC_IRQ + 2) << 7;
+ mips_wr_cvmctl(cvmctl);
}
static void
diff --git a/sys/mips/cavium/octeon_pmc.c b/sys/mips/cavium/octeon_pmc.c
index 8a7b573..0448018 100644
--- a/sys/mips/cavium/octeon_pmc.c
+++ b/sys/mips/cavium/octeon_pmc.c
@@ -57,8 +57,6 @@ static int octeon_pmc_probe(device_t);
static int octeon_pmc_attach(device_t);
static int octeon_pmc_intr(void *);
-#define OCTEON_PMC_IRQ 4
-
static void
octeon_pmc_identify(driver_t *drv, device_t parent)
{
@@ -82,7 +80,6 @@ octeon_pmc_attach(device_t dev)
struct octeon_pmc_softc *sc;
int error;
int rid;
- uint64_t cvmctl;
sc = device_get_softc(dev);
@@ -103,14 +100,6 @@ octeon_pmc_attach(device_t dev)
return (error);
}
- /*
- * Move the Performance Counter interrupt to OCTEON_PMC_IRQ
- */
- cvmctl = mips_rd_cvmctl();
- cvmctl &= ~(7 << 7);
- cvmctl |= (OCTEON_PMC_IRQ + 2) << 7;
- mips_wr_cvmctl(cvmctl);
-
return (0);
}
OpenPOWER on IntegriCloud