Skip to content

Commit 93d649b

Browse files
Lee Jonesherbertx
authored andcommitted
hwrng: st - Use real-world device timings for timeout
Samples are documented to be available every 0.667us, so in theory the 8 sample deep FIFO should take 5.336us to fill. However, during thorough testing, it became apparent that filling the FIFO actually takes closer to 12us. Also take into consideration that udelay() can behave oddly i.e. not delay for as long as requested. Suggested-by: Russell King <[email protected]>: "IIRC, Linus recommends a x2 factor on delays, especially timeouts generated by these functions. Signed-off-by: Lee Jones <[email protected]> Signed-off-by: Herbert Xu <[email protected]>
1 parent 8fd80f8 commit 93d649b

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

drivers/char/hw_random/st-rng.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,14 @@
3232
#define ST_RNG_FIFO_SIZE 8
3333
#define ST_RNG_SAMPLE_SIZE 2 /* 2 Byte (16bit) samples */
3434

35-
/* Samples are available every 0.667us, which we round to 1us */
36-
#define ST_RNG_FILL_FIFO_TIMEOUT (1 * (ST_RNG_FIFO_SIZE / ST_RNG_SAMPLE_SIZE))
35+
/*
36+
* Samples are documented to be available every 0.667us, so in theory
37+
* the 4 sample deep FIFO should take 2.668us to fill. However, during
38+
* thorough testing, it became apparent that filling the FIFO actually
39+
* takes closer to 12us. We then multiply by 2 in order to account for
40+
* the lack of udelay()'s reliability, suggested by Russell King.
41+
*/
42+
#define ST_RNG_FILL_FIFO_TIMEOUT (12 * 2)
3743

3844
struct st_rng_data {
3945
void __iomem *base;

0 commit comments

Comments
 (0)