PERFORCE change 119115 for review
Bruce M Simpson
bms at FreeBSD.org
Tue May 1 19:33:34 UTC 2007
http://perforce.freebsd.org/chv.cgi?CH=119115
Change 119115 by bms at bms_anglepoise on 2007/05/01 19:32:39
Move the hack which sets a default clock frequency under a
compile-time kernel option.
Create a separate include file for things relating to the
YAMON boot monitor API.
Affected files ...
.. //depot/projects/mips2/src/sys/conf/options.mips#3 edit
.. //depot/projects/mips2/src/sys/mips/conf/MALTA#12 edit
.. //depot/projects/mips2/src/sys/mips/mips/tick.c#7 edit
.. //depot/projects/mips2/src/sys/mips/mips4k/malta/yamon.c#2 edit
.. //depot/projects/mips2/src/sys/mips/mips4k/malta/yamon.h#1 add
Differences ...
==== //depot/projects/mips2/src/sys/conf/options.mips#3 (text+ko) ====
@@ -6,3 +6,4 @@
KERNPHYSADDR opt_global.h
KERNVIRTADDR opt_global.h
PHYSADDR opt_global.h
+TICK_USE_YAMON_FREQ opt_global.h
==== //depot/projects/mips2/src/sys/mips/conf/MALTA#12 (text+ko) ====
@@ -28,6 +28,7 @@
makeoptions MODULES_OVERRIDE=""
options KERNVIRTADDR=0x80100000
+options TICK_USE_YAMON_FREQ=defined
include "../mips4k/malta/std.malta"
hints "MALTA.hints" #Default places to look for devices.
==== //depot/projects/mips2/src/sys/mips/mips/tick.c#7 (text+ko) ====
@@ -28,8 +28,6 @@
/*
* Simple driver for the 32-bit interval counter built in to all
* MIPS32 CPUs.
- * XXX: For calibration this either needs an external clock, or
- * to be explicitly told what the frequency is.
*/
#include <sys/cdefs.h>
@@ -51,6 +49,10 @@
#include <machine/locore.h>
#include <machine/md_var.h>
+#ifdef TICK_USE_YAMON_FREQ
+#include <mips/mips4k/malta/yamon.h>
+#endif
+
uint64_t counter_freq;
uint64_t counts_per_hz;
uint32_t counts_per_usec;
@@ -77,40 +79,45 @@
static uint64_t
tick_ticker(void)
{
+
return ((uint64_t)mips_rd_count());
}
-#if 1
-extern char *yamon_getenv(char *);
-#endif
-
void
tick_init_params(void)
{
-#ifdef notyet
- u_int64_t counterval[2];
-#endif
if (bootverbose)
printf("Calibrating MIPS32 clock ... ");
-#ifdef notyet
- counterval[0] = mips_rd_count();
- DELAY(1000000);
- counterval[1] = mips_rd_count();
- counter_freq = counterval[1] - counterval[0];
-#else
- /* XXX: The boot monitor told us the CPU frequency. */
- {
+ do {
+#ifdef TICK_USE_YAMON_FREQ
+ /*
+ * Use the clock frequency specified in the environment
+ * variables providied to us by the YAMON monitor.
+ */
char *cp = yamon_getenv("khz");
- printf("cp: %s\n", cp);
+
if (cp == NULL) {
- printf("cannot determine clock frequency, defaulting to 10MHz\n");
+ printf("cannot determine clock frequency, "
+ "defaulting to 10MHz\n");
counter_freq = 10000000;
- } else
+ } else {
counter_freq = strtol(cp, (char **)NULL, 10) * 1000 ;
- }
+ }
+#else
+ /*
+ * Determine clock frequency from hardware.
+ * XXX: Requires a working DELAY() macro.
+ */
+ u_int64_t counterval[2];
+
+ counterval[0] = mips_rd_count();
+ DELAY(1000000);
+ counterval[1] = mips_rd_count();
+ counter_freq = counterval[1] - counterval[0];
#endif
+ } while (0);
counts_per_hz = counter_freq / hz;
counts_per_usec = counter_freq / 1000000;
@@ -190,7 +197,7 @@
/*
* Device section of file below
- */
+ */
static int
clock_intr(void *arg)
{
==== //depot/projects/mips2/src/sys/mips/mips4k/malta/yamon.c#2 (text+ko) ====
@@ -31,14 +31,7 @@
#include <sys/param.h>
#include <sys/systm.h>
-char* yamon_getenv(char *name);
-
-typedef struct {
- char *name;
- char *value;
-} yamon_env_t;
-
-extern yamon_env_t *fenvp[];
+#include <mips/mips4k/malta/yamon.h>
char *
yamon_getenv(char *name)
More information about the p4-projects
mailing list