Module Name: src
Committed By: skrll
Date: Wed Nov 21 08:47:13 UTC 2012
Modified Files:
src/sys/arch/arm/broadcom: bcm2835_tmr.c
Log Message:
Fix delay.
To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/broadcom/bcm2835_tmr.c
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/broadcom/bcm2835_tmr.c
diff -u src/sys/arch/arm/broadcom/bcm2835_tmr.c:1.1 src/sys/arch/arm/broadcom/bcm2835_tmr.c:1.2
--- src/sys/arch/arm/broadcom/bcm2835_tmr.c:1.1 Thu Jul 26 06:21:57 2012
+++ src/sys/arch/arm/broadcom/bcm2835_tmr.c Wed Nov 21 08:47:13 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: bcm2835_tmr.c,v 1.1 2012/07/26 06:21:57 skrll Exp $ */
+/* $NetBSD: bcm2835_tmr.c,v 1.2 2012/11/21 08:47:13 skrll Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bcm2835_tmr.c,v 1.1 2012/07/26 06:21:57 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bcm2835_tmr.c,v 1.2 2012/11/21 08:47:13 skrll Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -159,22 +159,19 @@ delay(unsigned int n)
uint32_t delta, usecs;
KASSERT(sc != NULL);
- int nhloops = 0;
last = bus_space_read_4(sc->sc_iot, sc->sc_ioh, BCM2835_STIMER_CLO);
delta = usecs = 0;
while (n > usecs) {
- if (nhloops++ > 0x100000) Debugger();
curr = bus_space_read_4(sc->sc_iot, sc->sc_ioh,
BCM2835_STIMER_CLO);
- /* XXXNH !?!?!?!?!?!?! - use CHI? */
/* Check to see if the timer has wrapped around. */
if (curr < last)
- delta += (last + (counts_per_hz - curr));
+ delta += curr + (UINT32_MAX - last);
else
- delta += (last - curr);
+ delta += curr - last;
last = curr;