Module Name:    src
Committed By:   matt
Date:           Fri Feb  1 19:27:48 UTC 2013

Modified Files:
        src/sys/arch/arm/broadcom: bcm53xx_rng.c

Log Message:
Use bus_space_read_multi_4 to drain the RNG's FIFO.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/broadcom/bcm53xx_rng.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/bcm53xx_rng.c
diff -u src/sys/arch/arm/broadcom/bcm53xx_rng.c:1.3 src/sys/arch/arm/broadcom/bcm53xx_rng.c:1.4
--- src/sys/arch/arm/broadcom/bcm53xx_rng.c:1.3	Sat Oct 27 17:24:37 2012
+++ src/sys/arch/arm/broadcom/bcm53xx_rng.c	Fri Feb  1 19:27:47 2013
@@ -33,7 +33,7 @@
 
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(1, "$NetBSD: bcm53xx_rng.c,v 1.3 2012/10/27 17:24:37 matt Exp $");
+__KERNEL_RCSID(1, "$NetBSD: bcm53xx_rng.c,v 1.4 2013/02/01 19:27:47 matt Exp $");
 
 #include <sys/bus.h>
 #include <sys/callout.h>
@@ -91,6 +91,13 @@ bcmrng_read_4(struct bcmrng_softc *sc, b
 }
 
 static inline void
+bcmrng_read_multi_4(struct bcmrng_softc *sc, bus_size_t o, uint32_t *p,
+    size_t c)
+{
+	return bus_space_read_multi_4(sc->sc_bst, sc->sc_bsh, o, p, c);
+}
+
+static inline void
 bcmrng_write_4(struct bcmrng_softc *sc, bus_size_t o, uint32_t v)
 {
 	bus_space_write_4(sc->sc_bst, sc->sc_bsh, o, v);
@@ -162,16 +169,13 @@ bcmrng_empty(struct bcmrng_softc *sc)
 	}
 
 	uint32_t data[nwords];
-	while (nwords-- > 0) {
-		/*
-		 * It's random data, who cares what order we load it in?
-		 */
-		data[nwords] = bcmrng_read_4(sc, RNG_DATA);
-	}
+
+	bcmrng_read_multi_4(sc, RNG_DATA, data, nwords);
+
 	rnd_add_data(&sc->sc_rnd_source, data, sizeof(data), sizeof(data) * 8);
 	mutex_exit(sc->sc_lock);
-	//aprint_debug_dev(sc->sc_dev, "added %zu words\n", __arraycount(data));
-	return __arraycount(data);
+	//aprint_debug_dev(sc->sc_dev, "added %zu words\n", nwords);
+	return nwords;
 }
 
 void

Reply via email to