Date: Sat, 3 Jul 2010 09:41:13 +0000 (UTC) From: Juli Mallett <jmallett@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r209654 - user/jmallett/octeon/sys/mips/cavium Message-ID: <201007030941.o639fD6e073324@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: jmallett Date: Sat Jul 3 09:41:12 2010 New Revision: 209654 URL: http://svn.freebsd.org/changeset/base/209654 Log: Use Cavium's 64-bit cyclecounter. Modified: user/jmallett/octeon/sys/mips/cavium/octeon_machdep.c Modified: user/jmallett/octeon/sys/mips/cavium/octeon_machdep.c ============================================================================== --- user/jmallett/octeon/sys/mips/cavium/octeon_machdep.c Fri Jul 2 22:17:13 2010 (r209653) +++ user/jmallett/octeon/sys/mips/cavium/octeon_machdep.c Sat Jul 3 09:41:12 2010 (r209654) @@ -47,6 +47,8 @@ __FBSDID("$FreeBSD$"); #include <sys/signalvar.h> #include <sys/sysent.h> #include <sys/sysproto.h> +#include <sys/time.h> +#include <sys/timetc.h> #include <sys/user.h> #include <vm/vm.h> @@ -111,8 +113,20 @@ static const struct octeon_feature_descr uint64_t ciu_get_en_reg_addr_new(int corenum, int intx, int enx, int ciu_ip); void ciu_dump_interrutps_enabled(int core_num, int intx, int enx, int ciu_ip); +static uint64_t octeon_get_ticks(void); +static unsigned octeon_get_timecount(struct timecounter *tc); + static void octeon_boot_params_init(register_t ptr); +static struct timecounter octeon_timecounter = { + octeon_get_timecount, /* get_timecount */ + 0, /* no poll_pps */ + 0xffffffffu, /* octeon_mask */ + 0, /* frequency */ + "Octeon", /* name */ + 900, /* quality (adjusted in code) */ +}; + void platform_cpu_init() { @@ -342,8 +356,14 @@ platform_start(__register_t a0, __regist kdb_enter(KDB_WHY_BOOTFLAGS, "Boot flags requested debugger"); #endif platform_counter_freq = cvmx_sysinfo_get()->cpu_clock_hz; + + octeon_timecounter.tc_frequency = cvmx_sysinfo_get()->cpu_clock_hz; + platform_timecounter = &octeon_timecounter; + mips_timer_init_params(platform_counter_freq, 0); + set_cputicker(octeon_get_ticks, cvmx_sysinfo_get()->cpu_clock_hz, 1); + #ifdef SMP /* * Clear any pending IPIs. @@ -359,6 +379,21 @@ platform_start(__register_t a0, __regist printf("\n"); } +static uint64_t +octeon_get_ticks(void) +{ + uint64_t cvmcount; + + CVMX_MF_CYCLE(cvmcount); + return (cvmcount); +} + +static unsigned +octeon_get_timecount(struct timecounter *tc) +{ + return ((unsigned)octeon_get_ticks()); +} + /* impSTART: This stuff should move back into the Cavium SDK */ /* ****************************************************************************************
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201007030941.o639fD6e073324>