Message ID | CALszF6BPPA=tezMLhmdC4YFwmH1tGhDxCNDZNwGp1cTDWP7Fmg@mail.gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Tuesday, May 24, 2016 10:50:17 AM CEST Maxime Coquelin wrote: > diff --git a/drivers/char/hw_random/stm32-rng.c > b/drivers/char/hw_random/stm32-rng.c > index 92a810648bd0..2a0fc90e4dc3 100644 > --- a/drivers/char/hw_random/stm32-rng.c > +++ b/drivers/char/hw_random/stm32-rng.c > @@ -68,6 +68,10 @@ static int stm32_rng_read(struct hwrng *rng, void > *data, size_t max, bool wait) > } while (!sr && --timeout); > } > > + if (WARN_ONCE(sr & (RNG_SR_SEIS | RNG_SR_CEIS), > + "bad RNG status - %x\n", sr)) > + writel_relaxed(0, priv->base + RNG_SR); > + > /* If error detected or data not ready... */ > if (sr != RNG_SR_DRDY) > break; > @@ -79,10 +83,6 @@ static int stm32_rng_read(struct hwrng *rng, void > *data, size_t max, bool wait) > max -= sizeof(u32); > } > > - if (WARN_ONCE(sr & (RNG_SR_SEIS | RNG_SR_CEIS), > - "bad RNG status - %x\n", sr)) > - writel_relaxed(0, priv->base + RNG_SR); > - > pm_runtime_mark_last_busy((struct device *) priv->rng.priv); > pm_runtime_put_sync_autosuspend((struct device *) priv->rng.priv); > > Thanks, > Yes, that looks good to me. Arnd
2016-05-24 10:58 GMT+02:00 Arnd Bergmann <arnd@arndb.de>: > On Tuesday, May 24, 2016 10:50:17 AM CEST Maxime Coquelin wrote: >> diff --git a/drivers/char/hw_random/stm32-rng.c >> b/drivers/char/hw_random/stm32-rng.c >> index 92a810648bd0..2a0fc90e4dc3 100644 >> --- a/drivers/char/hw_random/stm32-rng.c >> +++ b/drivers/char/hw_random/stm32-rng.c >> @@ -68,6 +68,10 @@ static int stm32_rng_read(struct hwrng *rng, void >> *data, size_t max, bool wait) >> } while (!sr && --timeout); >> } >> >> + if (WARN_ONCE(sr & (RNG_SR_SEIS | RNG_SR_CEIS), >> + "bad RNG status - %x\n", sr)) >> + writel_relaxed(0, priv->base + RNG_SR); >> + >> /* If error detected or data not ready... */ >> if (sr != RNG_SR_DRDY) >> break; >> @@ -79,10 +83,6 @@ static int stm32_rng_read(struct hwrng *rng, void >> *data, size_t max, bool wait) >> max -= sizeof(u32); >> } >> >> - if (WARN_ONCE(sr & (RNG_SR_SEIS | RNG_SR_CEIS), >> - "bad RNG status - %x\n", sr)) >> - writel_relaxed(0, priv->base + RNG_SR); >> - >> pm_runtime_mark_last_busy((struct device *) priv->rng.priv); >> pm_runtime_put_sync_autosuspend((struct device *) priv->rng.priv); >> >> Thanks, >> > > Yes, that looks good to me. Thanks! Sudip, do you want to send the patch, or I manage to do it? Maxime
On 24/05/16 09:50, Maxime Coquelin wrote: > diff --git a/drivers/char/hw_random/stm32-rng.c > b/drivers/char/hw_random/stm32-rng.c > index 92a810648bd0..2a0fc90e4dc3 100644 > --- a/drivers/char/hw_random/stm32-rng.c > +++ b/drivers/char/hw_random/stm32-rng.c > @@ -68,6 +68,10 @@ static int stm32_rng_read(struct hwrng *rng, void > *data, size_t max, bool wait) > } while (!sr && --timeout); > } > > + if (WARN_ONCE(sr & (RNG_SR_SEIS | RNG_SR_CEIS), > + "bad RNG status - %x\n", sr)) > + writel_relaxed(0, priv->base + RNG_SR); > + > /* If error detected or data not ready... */ > if (sr != RNG_SR_DRDY) > break; Minor quibble but I might prefer that the error handling/recovery actually be put on the error path itself (included in the if (sr != RNG_SR_DRDY) ). Daniel.
2016-05-24 12:09 GMT+02:00 Daniel Thompson <daniel.thompson@linaro.org>: > On 24/05/16 09:50, Maxime Coquelin wrote: >> >> diff --git a/drivers/char/hw_random/stm32-rng.c >> b/drivers/char/hw_random/stm32-rng.c >> index 92a810648bd0..2a0fc90e4dc3 100644 >> --- a/drivers/char/hw_random/stm32-rng.c >> +++ b/drivers/char/hw_random/stm32-rng.c >> @@ -68,6 +68,10 @@ static int stm32_rng_read(struct hwrng *rng, void >> *data, size_t max, bool wait) >> } while (!sr && --timeout); >> } >> >> + if (WARN_ONCE(sr & (RNG_SR_SEIS | RNG_SR_CEIS), >> + "bad RNG status - %x\n", sr)) >> + writel_relaxed(0, priv->base + RNG_SR); >> + >> /* If error detected or data not ready... */ >> if (sr != RNG_SR_DRDY) >> break; > > > Minor quibble but I might prefer that the error handling/recovery actually > be put on the error path itself (included in the if (sr != RNG_SR_DRDY) ). Yes, it would be better. Regards, Maxime
On Tuesday 24 May 2016 02:50 PM, Maxime Coquelin wrote: > 2016-05-24 10:58 GMT+02:00 Arnd Bergmann <arnd@arndb.de>: >> On Tuesday, May 24, 2016 10:50:17 AM CEST Maxime Coquelin wrote: >>> diff --git a/drivers/char/hw_random/stm32-rng.c >>> b/drivers/char/hw_random/stm32-rng.c >>> index 92a810648bd0..2a0fc90e4dc3 100644 >>> --- a/drivers/char/hw_random/stm32-rng.c >>> +++ b/drivers/char/hw_random/stm32-rng.c >>> @@ -68,6 +68,10 @@ static int stm32_rng_read(struct hwrng *rng, void >>> *data, size_t max, bool wait) >>> } while (!sr && --timeout); >>> } >>> >>> + if (WARN_ONCE(sr & (RNG_SR_SEIS | RNG_SR_CEIS), >>> + "bad RNG status - %x\n", sr)) >>> + writel_relaxed(0, priv->base + RNG_SR); >>> + >>> /* If error detected or data not ready... */ >>> if (sr != RNG_SR_DRDY) >>> break; >>> @@ -79,10 +83,6 @@ static int stm32_rng_read(struct hwrng *rng, void >>> *data, size_t max, bool wait) >>> max -= sizeof(u32); >>> } >>> >>> - if (WARN_ONCE(sr & (RNG_SR_SEIS | RNG_SR_CEIS), >>> - "bad RNG status - %x\n", sr)) >>> - writel_relaxed(0, priv->base + RNG_SR); >>> - >>> pm_runtime_mark_last_busy((struct device *) priv->rng.priv); >>> pm_runtime_put_sync_autosuspend((struct device *) priv->rng.priv); >>> >>> Thanks, >>> >> >> Yes, that looks good to me. > > Thanks! > Sudip, do you want to send the patch, or I manage to do it? Maybe you should send it, i have not done anything in reaching its final form. Regards Sudip
diff --git a/drivers/char/hw_random/stm32-rng.c b/drivers/char/hw_random/stm32-rng.c index 92a810648bd0..2a0fc90e4dc3 100644 --- a/drivers/char/hw_random/stm32-rng.c +++ b/drivers/char/hw_random/stm32-rng.c @@ -68,6 +68,10 @@ static int stm32_rng_read(struct hwrng *rng, void *data, size_t max, bool wait) } while (!sr && --timeout); } + if (WARN_ONCE(sr & (RNG_SR_SEIS | RNG_SR_CEIS), + "bad RNG status - %x\n", sr)) + writel_relaxed(0, priv->base + RNG_SR); + /* If error detected or data not ready... */ if (sr != RNG_SR_DRDY)