From: Kevin Hao <kexin....@windriver.com> The SDK commit a9d5338d0643 ("hwrng: bcm2835 - sleep more intelligently") and stable commit 3c5c7f926a4b ("hwrng: bcm2835 - Fix hwrng throughput regression") are trying to fix the same issue with different implementation. The later approach is better. So revert the SDK changes.
Signed-off-by: Kevin Hao <kexin....@windriver.com> --- Hi Bruce, Please help me merge this into the following two branches: v6.1/standard/bcm-2xxx-rpi v6.1/standard/preempt-rt/bcm-2xxx-rpi drivers/char/hw_random/bcm2835-rng.c | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/drivers/char/hw_random/bcm2835-rng.c b/drivers/char/hw_random/bcm2835-rng.c index b821fc12c80d..f46731a5dfe1 100644 --- a/drivers/char/hw_random/bcm2835-rng.c +++ b/drivers/char/hw_random/bcm2835-rng.c @@ -14,7 +14,6 @@ #include <linux/printk.h> #include <linux/clk.h> #include <linux/reset.h> -#include <linux/delay.h> #define RNG_CTRL 0x0 #define RNG_STATUS 0x4 @@ -29,9 +28,6 @@ #define RNG_INT_OFF 0x1 -#define RNG_FIFO_WORDS 4 -#define RNG_US_PER_WORD 34 /* Tuned for throughput */ - struct bcm2835_rng_priv { struct hwrng rng; void __iomem *base; @@ -68,24 +64,19 @@ static inline void rng_writel(struct bcm2835_rng_priv *priv, u32 val, static int bcm2835_rng_read(struct hwrng *rng, void *buf, size_t max, bool wait) { - u32 retries = 1000000/(RNG_FIFO_WORDS * RNG_US_PER_WORD); struct bcm2835_rng_priv *priv = to_rng_priv(rng); u32 max_words = max / sizeof(u32); u32 num_words, count; - num_words = rng_readl(priv, RNG_STATUS) >> 24; - - while (!num_words) { - if (!wait || !retries) + while ((rng_readl(priv, RNG_STATUS) >> 24) == 0) { + if (!wait) return 0; - retries--; - usleep_range((u32)RNG_US_PER_WORD, - (u32)RNG_US_PER_WORD * RNG_FIFO_WORDS); - num_words = rng_readl(priv, RNG_STATUS) >> 24; hwrng_yield(rng); } - num_words = min(num_words, max_words); + num_words = rng_readl(priv, RNG_STATUS) >> 24; + if (num_words > max_words) + num_words = max_words; for (count = 0; count < num_words; count++) ((u32 *)buf)[count] = rng_readl(priv, RNG_DATA); -- 2.39.2
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#13359): https://lists.yoctoproject.org/g/linux-yocto/message/13359 Mute This Topic: https://lists.yoctoproject.org/mt/102969990/21656 Group Owner: linux-yocto+ow...@lists.yoctoproject.org Unsubscribe: https://lists.yoctoproject.org/g/linux-yocto/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-