svn commit: r209654 - user/jmallett/octeon/sys/mips/cavium
Juli Mallett
jmallett at FreeBSD.org
Sat Jul 3 09:41:13 UTC 2010
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 */
/*
****************************************************************************************
More information about the svn-src-user
mailing list