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] -=-=-=-=-=-=-=-=-=-=-=-