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_ */
 

Reply via email to