diff options
author | jmallett <jmallett@FreeBSD.org> | 2010-11-28 08:18:16 +0000 |
---|---|---|
committer | jmallett <jmallett@FreeBSD.org> | 2010-11-28 08:18:16 +0000 |
commit | cdfefa0ba06939d897cb0d1f5987a4d0996ea3ef (patch) | |
tree | 0a50a5816f02b42087de787ad200f1eb12f29144 /sys/mips/cavium | |
parent | 4b7c147940d7db81a4434262cf5cb2f5cd0102f2 (diff) | |
parent | 76ef03b9cb287a0817808454c8b27cbcce5243d3 (diff) | |
download | FreeBSD-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/cavium')
-rw-r--r-- | sys/mips/cavium/files.octeon1 | 21 | ||||
-rw-r--r-- | sys/mips/cavium/octe/ethernet.c | 15 | ||||
-rw-r--r-- | sys/mips/cavium/octe/wrapper-cvmx-includes.h | 1 | ||||
-rw-r--r-- | sys/mips/cavium/octeon_machdep.c | 53 |
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, |