Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/arm/cortex Various fixes / changes
details: https://anonhg.NetBSD.org/src/rev/bede0964d7b8
branches: trunk
changeset: 964726:bede0964d7b8
user: skrll <skrll%NetBSD.org@localhost>
date: Wed Aug 14 09:20:00 2019 +0000
description:
Various fixes / changes
- don't use prescaler
- improve AB_DEBUG output
- fix a9ptmr_delay to work with a decrementing counter!
Thanks to jmcneill@ for proving I'm an idiot
diffstat:
sys/arch/arm/cortex/a9ptmr.c | 19 +++++++++++--------
1 files changed, 11 insertions(+), 8 deletions(-)
diffs (69 lines):
diff -r 54a0ce673123 -r bede0964d7b8 sys/arch/arm/cortex/a9ptmr.c
--- a/sys/arch/arm/cortex/a9ptmr.c Wed Aug 14 08:34:44 2019 +0000
+++ b/sys/arch/arm/cortex/a9ptmr.c Wed Aug 14 09:20:00 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: a9ptmr.c,v 1.1 2019/08/10 17:03:59 skrll Exp $ */
+/* $NetBSD: a9ptmr.c,v 1.2 2019/08/14 09:20:00 skrll Exp $ */
/*-
* Copyright (c) 2019 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: a9ptmr.c,v 1.1 2019/08/10 17:03:59 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: a9ptmr.c,v 1.2 2019/08/14 09:20:00 skrll Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -144,6 +144,7 @@
sc->sc_ctl = a9ptmr_read(sc, TMR_CTL);
sc->sc_prescaler = 1;
+#if 0
/*
* Let's hope the timer frequency isn't prime.
*/
@@ -154,14 +155,17 @@
}
}
sc->sc_freq /= sc->sc_prescaler;
+#endif
- aprint_debug_dev(sc->sc_dev, ": freq %d prescaler %d", sc->sc_freq,
+ aprint_debug(": freq %d prescaler %d", sc->sc_freq,
sc->sc_prescaler);
sc->sc_ctl = TMR_CTL_INT_ENABLE | TMR_CTL_AUTO_RELOAD | TMR_CTL_ENABLE;
sc->sc_ctl |= __SHIFTIN(sc->sc_prescaler - 1, TMR_CTL_PRESCALER);
sc->sc_load = (sc->sc_freq / hz) - 1;
+ aprint_debug(": load %d ", sc->sc_load);
+
a9ptmr_init_cpu_clock(curcpu());
aprint_naive("\n");
@@ -188,7 +192,6 @@
curcpu()->ci_data.cpu_cc_freq / 2;
KASSERT(freq != 0);
-
const uint64_t counts_per_usec = freq / 1000000;
uint32_t delta, usecs, last, curr;
@@ -200,11 +203,11 @@
while (n > usecs) {
curr = a9ptmr_read(sc, TMR_CTR);
- /* Check to see if the timer has wrapped around. */
- if (curr < last)
- delta += curr + (sc->sc_load - last);
+ /* Check to see if the timer has reloaded. */
+ if (curr > last)
+ delta += (sc->sc_load - curr) + last;
else
- delta += curr - last;
+ delta += last - curr;
last = curr;
Home |
Main Index |
Thread Index |
Old Index