In message: [linux-yocto] Revert "hwrng: bcm2835 - sleep more intelligently"
on 04/12/2023 Kevin Hao wrote:

> 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

merged.

Bruce

> 
>  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 (#13368): 
https://lists.yoctoproject.org/g/linux-yocto/message/13368
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/leave/6687884/21656/624485779/xyzzy
 [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to