From: Daniel Thompson Subject: Re: [PATCH 2/3] hwrng: stm32 - add support for STM32 HW RNG Date: Sun, 11 Oct 2015 20:24:08 +0100 Message-ID: References: <1443904519-24012-1-git-send-email-daniel.thompson@linaro.org> <1443904519-24012-3-git-send-email-daniel.thompson@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Cc: Lee Jones , Matt Mackall , Herbert Xu , "devicetree@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-crypto@vger.kernel.org" , "linux-kernel@vger.kernel.org" , Patch Tracking , Linaro Kernel Mailman List , Maxime Coquelin , Rob Herring , Pawel Moll , Mark Rutland , Ian Campbell , Kumar Gala To: Linus Walleij Return-path: In-Reply-To: Sender: linux-kernel-owner@vger.kernel.org List-Id: linux-crypto.vger.kernel.org On 5 October 2015 at 10:22, Daniel Thompson wrote: > On 4 October 2015 at 11:32, Linus Walleij wrote: >> On Sat, Oct 3, 2015 at 10:35 PM, Daniel Thompson >> wrote: >> Then this construct: >> >>> +static int stm32_rng_read(struct hwrng *rng, void *data, size_t max, bool wait) >>> +{ >> (...) >>> + /* enable random number generation */ >>> + clk_enable(priv->clk); >>> + cr = readl(priv->base + RNG_CR); >>> + writel(cr | RNG_CR_RNGEN, priv->base + RNG_CR); >> (...) >>> + /* disable the generator */ >>> + writel(cr, priv->base + RNG_CR); >>> + clk_disable(priv->clk); >> >> This is in the hotpath where megabytes of data may be read out >> by consecutive reads. I think it's wise to move the clock enable/disable >> and also the write to cr to enable/disable the block to runtime PM >> hooks, so that you can e.g. set some hysteresis around the disablement >> with pm_runtime_set_autosuspend_delay(&dev->dev, 50); >> pm_runtime_use_autosuspend(&dev->dev);pm_runtime_put_autosuspend(). >> For a primecell check the usage in drivers/mmc/host/mmci.c >> for a complex usecase or e.g. drivers/hwtracing/coresight/coresight-tpiu.c >> for a simpler usecase. >> >> For the performance hints I guess you can even test whether >> what I'm saying makes sense or not by reading some megabytes >> of random and timing it. > > I'll have to benchmark this. clk_enable/disable have pretty simple > implementations on STM32 so there might not be much in it. Well... I was extremely wrong about that! Switching the driver over to autosuspend yielded a very significant performance boost: ~1.1MiB/s to ~1.5MiB/s . Very pleased with that! Daniel.