summaryrefslogtreecommitdiffstats
path: root/sys/pci/xrpu.c
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>1999-07-03 08:23:00 +0000
committerphk <phk@FreeBSD.org>1999-07-03 08:23:00 +0000
commit1d20b72ec57ab7ec22422ba41719b0b503c35ea3 (patch)
treeb878ac7e9c7f416cf9a4e4deff9483889985babc /sys/pci/xrpu.c
parent88fd41ff5bd8091a59d252185bcce69695963c65 (diff)
downloadFreeBSD-src-1d20b72ec57ab7ec22422ba41719b0b503c35ea3.zip
FreeBSD-src-1d20b72ec57ab7ec22422ba41719b0b503c35ea3.tar.gz
Bail after 5 attempts to read very noisy signals.
Diffstat (limited to 'sys/pci/xrpu.c')
-rw-r--r--sys/pci/xrpu.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/sys/pci/xrpu.c b/sys/pci/xrpu.c
index 08b8d3d..8bc3bca 100644
--- a/sys/pci/xrpu.c
+++ b/sys/pci/xrpu.c
@@ -6,7 +6,7 @@
* this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
* ----------------------------------------------------------------------------
*
- * $Id: xrpu.c,v 1.12 1999/05/31 11:29:04 phk Exp $
+ * $Id: xrpu.c,v 1.13 1999/06/22 10:31:30 phk Exp $
*
* A very simple device driver for PCI cards based on Xilinx 6200 series
* FPGA/RPU devices. Current Functionality is to allow you to open and
@@ -100,24 +100,26 @@ void
xrpu_poll_pps(struct timecounter *tc)
{
struct softc *sc = tc->tc_priv;
- int i;
+ int i, j;
unsigned count1, ppscount;
for (i = 0; i < XRPU_MAX_PPS; i++) {
if (sc->assert[i]) {
ppscount = *(sc->assert[i]) & tc->tc_counter_mask;
+ j = 0;
do {
count1 = ppscount;
ppscount = *(sc->assert[i]) & tc->tc_counter_mask;
- } while (ppscount != count1);
+ } while (ppscount != count1 && ++j < 5);
pps_event(&sc->pps[i], tc, ppscount, PPS_CAPTUREASSERT);
}
if (sc->clear[i]) {
+ j = 0;
ppscount = *(sc->clear[i]) & tc->tc_counter_mask;
do {
count1 = ppscount;
ppscount = *(sc->clear[i]) & tc->tc_counter_mask;
- } while (ppscount != count1);
+ } while (ppscount != count1 && ++j < 5);
pps_event(&sc->pps[i], tc, ppscount, PPS_CAPTURECLEAR);
}
}
OpenPOWER on IntegriCloud