svn commit: r206676 - in user/jmallett/octeon/sys/mips/cavium: .
dev/rgmii
Juli Mallett
jmallett at FreeBSD.org
Thu Apr 15 19:18:36 UTC 2010
Author: jmallett
Date: Thu Apr 15 19:18:35 2010
New Revision: 206676
URL: http://svn.freebsd.org/changeset/base/206676
Log:
o) Rename OCTEON_SMP to SMP.
o) Use PCPU_GET(cpuid) rather than unimplemented Octeon method. Do keep the
cpuid in ebase just in case.
Modified:
user/jmallett/octeon/sys/mips/cavium/dev/rgmii/octeon_rgmx.c
user/jmallett/octeon/sys/mips/cavium/octeon_machdep.c
user/jmallett/octeon/sys/mips/cavium/octeon_mp.c
user/jmallett/octeon/sys/mips/cavium/octeon_pcmap_regs.h
Modified: user/jmallett/octeon/sys/mips/cavium/dev/rgmii/octeon_rgmx.c
==============================================================================
--- user/jmallett/octeon/sys/mips/cavium/dev/rgmii/octeon_rgmx.c Thu Apr 15 19:15:05 2010 (r206675)
+++ user/jmallett/octeon/sys/mips/cavium/dev/rgmii/octeon_rgmx.c Thu Apr 15 19:18:35 2010 (r206676)
@@ -1481,7 +1481,7 @@ static void octeon_config_hw_units_post_
oct_write64(OCTEON_POW_WORKQUEUE_INT_THRESHOLD(OCTEON_POW_RX_GROUP_NUM), thr.word64);
#endif
- ciu_enable_interrupts(OCTEON_CORE_ID, OCTEON_RGMX_CIU_INTX, OCTEON_RGMX_CIU_ENX,
+ ciu_enable_interrupts(PCPU_GET(cpuid), OCTEON_RGMX_CIU_INTX, OCTEON_RGMX_CIU_ENX,
(OCTEON_POW_RX_GROUP_MASK |
CIU_GENTIMER_BITS_ENABLE(CIU_GENTIMER_NUM_1)), CIU_MIPS_IP2);
Modified: user/jmallett/octeon/sys/mips/cavium/octeon_machdep.c
==============================================================================
--- user/jmallett/octeon/sys/mips/cavium/octeon_machdep.c Thu Apr 15 19:15:05 2010 (r206675)
+++ user/jmallett/octeon/sys/mips/cavium/octeon_machdep.c Thu Apr 15 19:18:35 2010 (r206676)
@@ -501,7 +501,7 @@ void ciu_enable_interrupts(int core_num,
#endif
ciu_intr_bits |= set_these_interrupt_bits;
oct_write64(ciu_intr_reg_addr, ciu_intr_bits);
-#ifdef OCTEON_SMP
+#ifdef SMP
mips_wbflush();
#endif
oct_read64(OCTEON_MIO_BOOT_BIST_STAT); /* Bus Barrier */
@@ -613,6 +613,14 @@ platform_start(__register_t a0, __regist
#endif
platform_counter_freq = octeon_get_clock_rate();
mips_timer_init_params(platform_counter_freq, 0);
+
+#ifdef SMP
+ /*
+ * Clear any pending IPIs and enable the IPI interrupt.
+ */
+ oct_write64(OCTEON_CIU_MBOX_CLRX(0), 0xffffffff);
+ ciu_enable_interrupts(0, CIU_INT_1, CIU_EN_0, OCTEON_CIU_ENABLE_MBOX_INTR, CIU_MIPS_IP3);
+#endif
}
/* impSTART: This stuff should move back into the Cavium SDK */
Modified: user/jmallett/octeon/sys/mips/cavium/octeon_mp.c
==============================================================================
--- user/jmallett/octeon/sys/mips/cavium/octeon_mp.c Thu Apr 15 19:15:05 2010 (r206675)
+++ user/jmallett/octeon/sys/mips/cavium/octeon_mp.c Thu Apr 15 19:18:35 2010 (r206676)
@@ -43,13 +43,18 @@ unsigned octeon_ap_boot = ~0;
void
platform_ipi_send(int cpuid)
{
- panic("%s: not yet implemented.", __func__);
+ oct_write64(OCTEON_CIU_MBOX_SETX(cpuid), 1);
+ mips_wbflush();
}
void
platform_ipi_clear(void)
{
- panic("%s: not yet implemented.", __func__);
+ uint64_t action;
+
+ action = oct_read64(OCTEON_CIU_MBOX_CLRX(PCPU_GET(cpuid)));
+ KASSERT(action == 1, ("unexpected IPIs: %#jx", (uintmax_t)action));
+ oct_write64(OCTEON_CIU_MBOX_CLRX(PCPU_GET(cpuid)), action);
}
int
@@ -63,10 +68,18 @@ platform_init_ap(int cpuid)
{
/*
* Set the exception base.
- *
- * XXX Low bits seem to be used for cpuid?
*/
- mips_wr_prid1(0x80000000);
+ mips_wr_prid1(0x80000000 | cpuid);
+
+ /*
+ * Set up interrupts, clear IPIs and unmask the IPI interrupt.
+ */
+ octeon_ciu_reset();
+
+ oct_write64(OCTEON_CIU_MBOX_CLRX(cpuid), 0xffffffff);
+ ciu_enable_interrupts(cpuid, CIU_INT_1, CIU_EN_0, OCTEON_CIU_ENABLE_MBOX_INTR, CIU_MIPS_IP3);
+
+ mips_wbflush();
}
int
Modified: user/jmallett/octeon/sys/mips/cavium/octeon_pcmap_regs.h
==============================================================================
--- user/jmallett/octeon/sys/mips/cavium/octeon_pcmap_regs.h Thu Apr 15 19:15:05 2010 (r206675)
+++ user/jmallett/octeon/sys/mips/cavium/octeon_pcmap_regs.h Thu Apr 15 19:18:35 2010 (r206676)
@@ -54,14 +54,6 @@
#ifndef LOCORE
-/* XXXimp: From Cavium's include/pcpu.h, need to port that over */
-#ifndef OCTEON_SMP
-#define OCTEON_CORE_ID 0
-#else
-extern struct pcpu *cpuid_to_pcpu[];
-#define OCTEON_CORE_ID (mips_rd_coreid())
-#endif
-
/*
* Utility inlines & macros
*/
More information about the svn-src-user
mailing list