Module Name: src
Committed By: jmcneill
Date: Sun Jun 11 01:09:44 UTC 2017
Modified Files:
src/sys/arch/arm/samsung: exynos_platform.c mct.c mct_var.h
Log Message:
Add delay and enable mct timecounter.
To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/samsung/exynos_platform.c
cvs rdiff -u -r1.10 -r1.11 src/sys/arch/arm/samsung/mct.c
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/samsung/mct_var.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/arm/samsung/exynos_platform.c
diff -u src/sys/arch/arm/samsung/exynos_platform.c:1.2 src/sys/arch/arm/samsung/exynos_platform.c:1.3
--- src/sys/arch/arm/samsung/exynos_platform.c:1.2 Sat Jun 10 23:22:36 2017
+++ src/sys/arch/arm/samsung/exynos_platform.c Sun Jun 11 01:09:44 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: exynos_platform.c,v 1.2 2017/06/10 23:22:36 jmcneill Exp $ */
+/* $NetBSD: exynos_platform.c,v 1.3 2017/06/11 01:09:44 jmcneill Exp $ */
/*-
* Copyright (c) 2017 Jared D. McNeill <[email protected]>
@@ -33,7 +33,7 @@
#include "ukbd.h"
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: exynos_platform.c,v 1.2 2017/06/10 23:22:36 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: exynos_platform.c,v 1.3 2017/06/11 01:09:44 jmcneill Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -130,7 +130,9 @@ exynos_platform_reset(void)
static void
exynos_platform_delay(u_int us)
{
- gtmr_delay(us);
+ extern void mct_delay(u_int);
+
+ mct_delay(us);
}
static u_int
Index: src/sys/arch/arm/samsung/mct.c
diff -u src/sys/arch/arm/samsung/mct.c:1.10 src/sys/arch/arm/samsung/mct.c:1.11
--- src/sys/arch/arm/samsung/mct.c:1.10 Thu Jan 7 04:45:10 2016
+++ src/sys/arch/arm/samsung/mct.c Sun Jun 11 01:09:44 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: mct.c,v 1.10 2016/01/07 04:45:10 marty Exp $ */
+/* $NetBSD: mct.c,v 1.11 2017/06/11 01:09:44 jmcneill Exp $ */
/*-
* Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
#include <sys/cdefs.h>
-__KERNEL_RCSID(1, "$NetBSD: mct.c,v 1.10 2016/01/07 04:45:10 marty Exp $");
+__KERNEL_RCSID(1, "$NetBSD: mct.c,v 1.11 2017/06/11 01:09:44 jmcneill Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -56,11 +56,11 @@ static int mct_match(device_t, cfdata_t
static void mct_attach(device_t, device_t, void *);
static int clockhandler(void *);
+static u_int mct_get_timecount(struct timecounter *);
CFATTACH_DECL_NEW(exyo_mct, 0, mct_match, mct_attach, NULL, NULL);
-#if 0
static struct timecounter mct_timecounter = {
.tc_get_timecount = mct_get_timecount,
.tc_poll_pps = 0,
@@ -71,7 +71,6 @@ static struct timecounter mct_timecounte
.tc_priv = &mct_sc,
.tc_next = NULL,
};
-#endif
static inline uint32_t
mct_read_global(struct mct_softc *sc, bus_size_t o)
@@ -157,6 +156,7 @@ mct_attach(device_t parent, device_t sel
self->dv_private = sc;
sc->sc_dev = self;
sc->sc_bst = faa->faa_bst;
+ sc->sc_freq = EXYNOS_F_IN_FREQ;
error = bus_space_map(sc->sc_bst, addr, size, 0, &sc->sc_bsh);
if (error) {
@@ -166,7 +166,7 @@ mct_attach(device_t parent, device_t sel
}
aprint_naive("\n");
- aprint_normal(": Exynos SoC multi core timer (64 bits) - NOT IMPLEMENTED\n");
+ aprint_normal(": Exynos SoC multi core timer (64 bits)\n");
evcnt_attach_dynamic(&sc->sc_ev_missing_ticks, EVCNT_TYPE_MISC, NULL,
device_xname(self), "missing interrupts");
@@ -187,6 +187,30 @@ mct_gettime(struct mct_softc *sc)
return ((uint64_t) hi << 32) | lo;
}
+static u_int
+mct_get_timecount(struct timecounter *tc)
+{
+ struct mct_softc *sc = tc->tc_priv;
+
+ return (u_int)mct_gettime(sc);
+}
+
+void
+mct_delay(u_int us)
+{
+ struct mct_softc *sc = &mct_sc;
+
+ if (sc->sc_bsh == (bus_space_handle_t)0)
+ return;
+
+ int64_t mct_ticks = ((uint64_t)us * sc->sc_freq) / 1000000;
+ uint64_t ticks_prev = mct_gettime(sc);
+ while (mct_ticks > 0) {
+ uint64_t ticks_cur = mct_gettime(sc);
+ mct_ticks -= (ticks_cur - ticks_prev);
+ ticks_prev = ticks_cur;
+ }
+}
/* interrupt handler */
static int
@@ -250,8 +274,6 @@ mct_init_cpu_clock(struct cpu_info *ci)
mct_write_global(sc, MCT_G_TCON, tcon);
}
-
-#if 0
void
cpu_initclocks(void)
{
@@ -284,4 +306,7 @@ cpu_initclocks(void)
#endif
}
-#endif
+void
+setstatclockrate(int newhz)
+{
+}
Index: src/sys/arch/arm/samsung/mct_var.h
diff -u src/sys/arch/arm/samsung/mct_var.h:1.4 src/sys/arch/arm/samsung/mct_var.h:1.5
--- src/sys/arch/arm/samsung/mct_var.h:1.4 Mon Dec 21 00:54:35 2015
+++ src/sys/arch/arm/samsung/mct_var.h Sun Jun 11 01:09:44 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: mct_var.h,v 1.4 2015/12/21 00:54:35 marty Exp $ */
+/* $NetBSD: mct_var.h,v 1.5 2017/06/11 01:09:44 jmcneill Exp $ */
/*-
* Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -52,6 +52,7 @@ static struct mct_softc {
} mct_sc;
void mct_init_cpu_clock(struct cpu_info *ci);
+void mct_delay(u_int);
#endif /* _ARM_SAMSUNG_MCT_VAR_H_ */