summaryrefslogtreecommitdiffstats
path: root/sys/mips
diff options
context:
space:
mode:
authorjmallett <jmallett@FreeBSD.org>2010-11-28 08:18:16 +0000
committerjmallett <jmallett@FreeBSD.org>2010-11-28 08:18:16 +0000
commitcdfefa0ba06939d897cb0d1f5987a4d0996ea3ef (patch)
tree0a50a5816f02b42087de787ad200f1eb12f29144 /sys/mips
parent4b7c147940d7db81a4434262cf5cb2f5cd0102f2 (diff)
parent76ef03b9cb287a0817808454c8b27cbcce5243d3 (diff)
downloadFreeBSD-src-cdfefa0ba06939d897cb0d1f5987a4d0996ea3ef.zip
FreeBSD-src-cdfefa0ba06939d897cb0d1f5987a4d0996ea3ef.tar.gz
Merge Cavium Octeon SDK 2.0 Simple Executive; this brings some fixes and new
facilities as well as support for the Octeon 2 family of SoCs. XXX Note that with our antediluvian assembler, we can't support some Octeon 2 instructions and fall back to using the old ones instead.
Diffstat (limited to 'sys/mips')
-rw-r--r--sys/mips/cavium/files.octeon121
-rw-r--r--sys/mips/cavium/octe/ethernet.c15
-rw-r--r--sys/mips/cavium/octe/wrapper-cvmx-includes.h1
-rw-r--r--sys/mips/cavium/octeon_machdep.c53
4 files changed, 69 insertions, 21 deletions
diff --git a/sys/mips/cavium/files.octeon1 b/sys/mips/cavium/files.octeon1
index de2273a..13a5c46 100644
--- a/sys/mips/cavium/files.octeon1
+++ b/sys/mips/cavium/files.octeon1
@@ -49,21 +49,42 @@ contrib/octeon-sdk/cvmx-usb.c optional octusb
# optional but on in the default config would seem reasonable.
contrib/octeon-sdk/cvmx-cmd-queue.c standard
contrib/octeon-sdk/cvmx-bootmem.c standard
+contrib/octeon-sdk/cvmx-clock.c standard
+contrib/octeon-sdk/cvmx-error.c standard
+contrib/octeon-sdk/cvmx-error-custom.c standard
+contrib/octeon-sdk/cvmx-error-init-cn30xx.c standard
+contrib/octeon-sdk/cvmx-error-init-cn31xx.c standard
+contrib/octeon-sdk/cvmx-error-init-cn38xx.c standard
+contrib/octeon-sdk/cvmx-error-init-cn38xxp2.c standard
+contrib/octeon-sdk/cvmx-error-init-cn50xx.c standard
+contrib/octeon-sdk/cvmx-error-init-cn52xx.c standard
+contrib/octeon-sdk/cvmx-error-init-cn52xxp1.c standard
+contrib/octeon-sdk/cvmx-error-init-cn56xx.c standard
+contrib/octeon-sdk/cvmx-error-init-cn56xxp1.c standard
+contrib/octeon-sdk/cvmx-error-init-cn58xx.c standard
+contrib/octeon-sdk/cvmx-error-init-cn58xxp1.c standard
+contrib/octeon-sdk/cvmx-error-init-cn63xx.c standard
+contrib/octeon-sdk/cvmx-error-init-cn63xxp1.c standard
contrib/octeon-sdk/cvmx-fpa.c standard
contrib/octeon-sdk/cvmx-helper.c standard
contrib/octeon-sdk/cvmx-helper-board.c standard
contrib/octeon-sdk/cvmx-helper-errata.c standard
contrib/octeon-sdk/cvmx-helper-fpa.c standard
+contrib/octeon-sdk/cvmx-helper-jtag.c standard
contrib/octeon-sdk/cvmx-helper-loop.c standard
contrib/octeon-sdk/cvmx-helper-npi.c standard
contrib/octeon-sdk/cvmx-helper-rgmii.c standard
contrib/octeon-sdk/cvmx-helper-sgmii.c standard
contrib/octeon-sdk/cvmx-helper-spi.c standard
+contrib/octeon-sdk/cvmx-helper-srio.c standard
contrib/octeon-sdk/cvmx-helper-util.c standard
contrib/octeon-sdk/cvmx-helper-xaui.c standard
+contrib/octeon-sdk/cvmx-l2c.c standard
+contrib/octeon-sdk/cvmx-pcie.c standard
contrib/octeon-sdk/cvmx-pko.c standard
contrib/octeon-sdk/cvmx-spi.c standard
contrib/octeon-sdk/cvmx-spi4000.c standard
+contrib/octeon-sdk/cvmx-srio.c standard
contrib/octeon-sdk/cvmx-sysinfo.c standard
contrib/octeon-sdk/cvmx-thunder.c standard
contrib/octeon-sdk/cvmx-twsi.c standard
diff --git a/sys/mips/cavium/octe/ethernet.c b/sys/mips/cavium/octe/ethernet.c
index 1f2809c..812fc01 100644
--- a/sys/mips/cavium/octe/ethernet.c
+++ b/sys/mips/cavium/octe/ethernet.c
@@ -462,8 +462,6 @@ void cvm_oct_cleanup_module(void)
/* Disable POW interrupt */
cvmx_write_csr(CVMX_POW_WQ_INT_THRX(pow_receive_group), 0);
- cvmx_ipd_disable();
-
#if 0
/* Free the interrupt handler */
free_irq(8 + pow_receive_group, cvm_oct_device);
@@ -471,7 +469,8 @@ void cvm_oct_cleanup_module(void)
callout_stop(&cvm_oct_poll_timer);
cvm_oct_rx_shutdown();
- cvmx_pko_disable();
+
+ cvmx_helper_shutdown_packet_io_global();
/* Free the ethernet devices */
for (port = 0; port < TOTAL_NUMBER_OF_PORTS; port++) {
@@ -486,14 +485,4 @@ void cvm_oct_cleanup_module(void)
cvm_oct_device[port] = NULL;
}
}
-
- cvmx_pko_shutdown();
-
- cvmx_ipd_free_ptr();
-
- /* Free the HW pools */
- cvm_oct_mem_empty_fpa(CVMX_FPA_PACKET_POOL, CVMX_FPA_PACKET_POOL_SIZE, num_packet_buffers);
- cvm_oct_mem_empty_fpa(CVMX_FPA_WQE_POOL, CVMX_FPA_WQE_POOL_SIZE, num_packet_buffers);
- if (CVMX_FPA_OUTPUT_BUFFER_POOL != CVMX_FPA_PACKET_POOL)
- cvm_oct_mem_empty_fpa(CVMX_FPA_OUTPUT_BUFFER_POOL, CVMX_FPA_OUTPUT_BUFFER_POOL_SIZE, 128);
}
diff --git a/sys/mips/cavium/octe/wrapper-cvmx-includes.h b/sys/mips/cavium/octe/wrapper-cvmx-includes.h
index bc69505..f59a924 100644
--- a/sys/mips/cavium/octe/wrapper-cvmx-includes.h
+++ b/sys/mips/cavium/octe/wrapper-cvmx-includes.h
@@ -34,7 +34,6 @@ AND WITH ALL FAULTS AND CAVIUM NETWORKS MAKES NO PROMISES, REPRESENTATIONS OR W
#include <contrib/octeon-sdk/cvmx.h>
#include <contrib/octeon-sdk/cvmx-version.h>
#include <contrib/octeon-sdk/cvmx-atomic.h>
-#include <contrib/octeon-sdk/cvmx-ciu.h>
#include <contrib/octeon-sdk/cvmx-pip.h>
#include <contrib/octeon-sdk/cvmx-ipd.h>
#include <contrib/octeon-sdk/cvmx-pko.h>
diff --git a/sys/mips/cavium/octeon_machdep.c b/sys/mips/cavium/octeon_machdep.c
index 0a1480e..ddfe0d1 100644
--- a/sys/mips/cavium/octeon_machdep.c
+++ b/sys/mips/cavium/octeon_machdep.c
@@ -406,6 +406,49 @@ octeon_get_timecount(struct timecounter *tc)
return ((unsigned)octeon_get_ticks());
}
+/**
+ * version of printf that works better in exception context.
+ *
+ * @param format
+ *
+ * XXX If this function weren't in cvmx-interrupt.c, we'd use the SDK version.
+ */
+void cvmx_safe_printf(const char *format, ...)
+{
+ char buffer[256];
+ char *ptr = buffer;
+ int count;
+ va_list args;
+
+ va_start(args, format);
+#ifndef __U_BOOT__
+ count = vsnprintf(buffer, sizeof(buffer), format, args);
+#else
+ count = vsprintf(buffer, format, args);
+#endif
+ va_end(args);
+
+ while (count-- > 0)
+ {
+ cvmx_uart_lsr_t lsrval;
+
+ /* Spin until there is room */
+ do
+ {
+ lsrval.u64 = cvmx_read_csr(CVMX_MIO_UARTX_LSR(0));
+#if !defined(CONFIG_OCTEON_SIM_SPEED)
+ if (lsrval.s.temt == 0)
+ cvmx_wait(10000); /* Just to reduce the load on the system */
+#endif
+ }
+ while (lsrval.s.temt == 0);
+
+ if (*ptr == '\n')
+ cvmx_write_csr(CVMX_MIO_UARTX_THR(0), '\r');
+ cvmx_write_csr(CVMX_MIO_UARTX_THR(0), *ptr++);
+ }
+}
+
/* impSTART: This stuff should move back into the Cavium SDK */
/*
****************************************************************************************
@@ -490,8 +533,6 @@ octeon_is_simulation(void)
static void
octeon_process_app_desc_ver_6(void)
{
- void *phy_mem_desc_ptr;
-
/* XXX Why is 0x00000000ffffffffULL a bad value? */
if (app_desc_ptr->cvmx_desc_vaddr == 0 ||
app_desc_ptr->cvmx_desc_vaddr == 0xfffffffful)
@@ -506,9 +547,7 @@ octeon_process_app_desc_ver_6(void)
(int) octeon_bootinfo->major_version,
(int) octeon_bootinfo->minor_version, octeon_bootinfo);
- phy_mem_desc_ptr =
- (void *)MIPS_PHYS_TO_KSEG0(octeon_bootinfo->phy_mem_desc_addr);
- cvmx_sysinfo_minimal_initialize(phy_mem_desc_ptr,
+ cvmx_sysinfo_minimal_initialize(octeon_bootinfo->phy_mem_desc_addr,
octeon_bootinfo->board_type,
octeon_bootinfo->board_rev_major,
octeon_bootinfo->board_rev_minor,
@@ -529,9 +568,9 @@ octeon_boot_params_init(register_t ptr)
KASSERT(octeon_bootinfo != NULL, ("octeon_bootinfo should be set"));
- if (cvmx_sysinfo_get()->phy_mem_desc_ptr == NULL)
+ if (cvmx_sysinfo_get()->phy_mem_desc_addr == (uint64_t)0)
panic("Your boot loader did not supply a memory descriptor.");
- cvmx_bootmem_init(cvmx_sysinfo_get()->phy_mem_desc_ptr);
+ cvmx_bootmem_init(cvmx_sysinfo_get()->phy_mem_desc_addr);
printf("Boot Descriptor Ver: %u -> %u/%u",
app_desc_ptr->desc_version, octeon_bootinfo->major_version,
OpenPOWER on IntegriCloud