From: "Álvaro Fernández Rojas" <noltari@gmail.com> To: "Matt Mackall" <mpm@selenic.com>, "Herbert Xu" <herbert@gondor.apana.org.au>, "Rob Herring" <robh+dt@kernel.org>, "Nicolas Saenz Julienne" <nsaenzjulienne@suse.de>, "Florian Fainelli" <f.fainelli@gmail.com>, "Ray Jui" <rjui@broadcom.com>, "Scott Branden" <sbranden@broadcom.com>, bcm-kernel-feedback-list@broadcom.com, "Philipp Zabel" <p.zabel@pengutronix.de>, "Mark Brown" <broonie@kernel.org>, "Álvaro Fernández Rojas" <noltari@gmail.com>, "Guenter Roeck" <linux@roeck-us.net>, "Bjorn Andersson" <bjorn.andersson@linaro.org>, "Nícolas F. R. A. Prado" <nfraprado@protonmail.com>, "Rikard Falkeborn" <rikard.falkeborn@gmail.com>, "Stefan Wahren" <stefan.wahren@i2se.com>, linux-crypto@vger.kernel.org, devicetree@vger.kernel.org, linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 2/2] hwrng: bcm2835: add reset support Date: Wed, 24 Feb 2021 09:22:30 +0100 [thread overview] Message-ID: <20210224082230.29015-3-noltari@gmail.com> (raw) In-Reply-To: <20210224082230.29015-1-noltari@gmail.com> BCM6368 devices need to reset the in order to generate true random numbers. This is what BCM6368 produces without a reset: root@OpenWrt:/# cat /dev/hwrng | rngtest -c 1000 rngtest 6.10 Copyright (c) 2004 by Henrique de Moraes Holschuh This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. rngtest: starting FIPS tests... rngtest: bits received from input: 20000032 rngtest: FIPS 140-2 successes: 0 rngtest: FIPS 140-2 failures: 1000 rngtest: FIPS 140-2(2001-10-10) Monobit: 2 rngtest: FIPS 140-2(2001-10-10) Poker: 1000 rngtest: FIPS 140-2(2001-10-10) Runs: 1000 rngtest: FIPS 140-2(2001-10-10) Long run: 30 rngtest: FIPS 140-2(2001-10-10) Continuous run: 0 rngtest: input channel speed: (min=37.253; avg=320.827; max=635.783)Mibits/s rngtest: FIPS tests speed: (min=12.141; avg=15.034; max=16.428)Mibits/s rngtest: Program run time: 1336176 microseconds Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com> --- v4: add reset_control_rearm(). v3: no changes. v2: no changes. drivers/char/hw_random/bcm2835-rng.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/char/hw_random/bcm2835-rng.c b/drivers/char/hw_random/bcm2835-rng.c index 1a7c43b43c6b..92658edaff22 100644 --- a/drivers/char/hw_random/bcm2835-rng.c +++ b/drivers/char/hw_random/bcm2835-rng.c @@ -13,6 +13,7 @@ #include <linux/platform_device.h> #include <linux/printk.h> #include <linux/clk.h> +#include <linux/reset.h> #define RNG_CTRL 0x0 #define RNG_STATUS 0x4 @@ -32,6 +33,7 @@ struct bcm2835_rng_priv { void __iomem *base; bool mask_interrupts; struct clk *clk; + struct reset_control *reset; }; static inline struct bcm2835_rng_priv *to_rng_priv(struct hwrng *rng) @@ -94,6 +96,10 @@ static int bcm2835_rng_init(struct hwrng *rng) return ret; } + ret = reset_control_reset(priv->reset); + if (ret) + return ret; + if (priv->mask_interrupts) { /* mask the interrupt */ val = rng_readl(priv, RNG_INT_MASK); @@ -115,6 +121,8 @@ static void bcm2835_rng_cleanup(struct hwrng *rng) /* disable rng hardware */ rng_writel(priv, 0, RNG_CTRL); + reset_control_rearm(priv->reset); + if (!IS_ERR(priv->clk)) clk_disable_unprepare(priv->clk); } @@ -159,6 +167,10 @@ static int bcm2835_rng_probe(struct platform_device *pdev) if (PTR_ERR(priv->clk) == -EPROBE_DEFER) return -EPROBE_DEFER; + priv->reset = devm_reset_control_get_optional_exclusive(dev, NULL); + if (IS_ERR(priv->reset)) + return PTR_ERR(priv->reset); + priv->rng.name = pdev->name; priv->rng.init = bcm2835_rng_init; priv->rng.read = bcm2835_rng_read; -- 2.20.1
WARNING: multiple messages have this Message-ID (diff)
From: "Álvaro Fernández Rojas" <noltari@gmail.com> To: "Matt Mackall" <mpm@selenic.com>, "Herbert Xu" <herbert@gondor.apana.org.au>, "Rob Herring" <robh+dt@kernel.org>, "Nicolas Saenz Julienne" <nsaenzjulienne@suse.de>, "Florian Fainelli" <f.fainelli@gmail.com>, "Ray Jui" <rjui@broadcom.com>, "Scott Branden" <sbranden@broadcom.com>, bcm-kernel-feedback-list@broadcom.com, "Philipp Zabel" <p.zabel@pengutronix.de>, "Mark Brown" <broonie@kernel.org>, "Álvaro Fernández Rojas" <noltari@gmail.com>, "Guenter Roeck" <linux@roeck-us.net>, "Bjorn Andersson" <bjorn.andersson@linaro.org>, "Nícolas F. R. A. Prado" <nfraprado@protonmail.com>, "Rikard Falkeborn" <rikard.falkeborn@gmail.com>, "Stefan Wahren" <stefan.wahren@i2se.com>, linux-crypto@vger.kernel.org, devicetree@vger.kernel.org, linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 2/2] hwrng: bcm2835: add reset support Date: Wed, 24 Feb 2021 09:22:30 +0100 [thread overview] Message-ID: <20210224082230.29015-3-noltari@gmail.com> (raw) In-Reply-To: <20210224082230.29015-1-noltari@gmail.com> BCM6368 devices need to reset the in order to generate true random numbers. This is what BCM6368 produces without a reset: root@OpenWrt:/# cat /dev/hwrng | rngtest -c 1000 rngtest 6.10 Copyright (c) 2004 by Henrique de Moraes Holschuh This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. rngtest: starting FIPS tests... rngtest: bits received from input: 20000032 rngtest: FIPS 140-2 successes: 0 rngtest: FIPS 140-2 failures: 1000 rngtest: FIPS 140-2(2001-10-10) Monobit: 2 rngtest: FIPS 140-2(2001-10-10) Poker: 1000 rngtest: FIPS 140-2(2001-10-10) Runs: 1000 rngtest: FIPS 140-2(2001-10-10) Long run: 30 rngtest: FIPS 140-2(2001-10-10) Continuous run: 0 rngtest: input channel speed: (min=37.253; avg=320.827; max=635.783)Mibits/s rngtest: FIPS tests speed: (min=12.141; avg=15.034; max=16.428)Mibits/s rngtest: Program run time: 1336176 microseconds Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com> --- v4: add reset_control_rearm(). v3: no changes. v2: no changes. drivers/char/hw_random/bcm2835-rng.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/char/hw_random/bcm2835-rng.c b/drivers/char/hw_random/bcm2835-rng.c index 1a7c43b43c6b..92658edaff22 100644 --- a/drivers/char/hw_random/bcm2835-rng.c +++ b/drivers/char/hw_random/bcm2835-rng.c @@ -13,6 +13,7 @@ #include <linux/platform_device.h> #include <linux/printk.h> #include <linux/clk.h> +#include <linux/reset.h> #define RNG_CTRL 0x0 #define RNG_STATUS 0x4 @@ -32,6 +33,7 @@ struct bcm2835_rng_priv { void __iomem *base; bool mask_interrupts; struct clk *clk; + struct reset_control *reset; }; static inline struct bcm2835_rng_priv *to_rng_priv(struct hwrng *rng) @@ -94,6 +96,10 @@ static int bcm2835_rng_init(struct hwrng *rng) return ret; } + ret = reset_control_reset(priv->reset); + if (ret) + return ret; + if (priv->mask_interrupts) { /* mask the interrupt */ val = rng_readl(priv, RNG_INT_MASK); @@ -115,6 +121,8 @@ static void bcm2835_rng_cleanup(struct hwrng *rng) /* disable rng hardware */ rng_writel(priv, 0, RNG_CTRL); + reset_control_rearm(priv->reset); + if (!IS_ERR(priv->clk)) clk_disable_unprepare(priv->clk); } @@ -159,6 +167,10 @@ static int bcm2835_rng_probe(struct platform_device *pdev) if (PTR_ERR(priv->clk) == -EPROBE_DEFER) return -EPROBE_DEFER; + priv->reset = devm_reset_control_get_optional_exclusive(dev, NULL); + if (IS_ERR(priv->reset)) + return PTR_ERR(priv->reset); + priv->rng.name = pdev->name; priv->rng.init = bcm2835_rng_init; priv->rng.read = bcm2835_rng_read; -- 2.20.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2021-02-24 8:23 UTC|newest] Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-02-22 19:45 [PATCH] hwrng: bcm2835: add reset support Álvaro Fernández Rojas 2021-02-22 19:45 ` Álvaro Fernández Rojas 2021-02-23 16:01 ` [PATCH 0/2] " Álvaro Fernández Rojas 2021-02-23 16:01 ` Álvaro Fernández Rojas 2021-02-23 16:01 ` [PATCH 1/2] dt-bindings: rng: bcm2835: document " Álvaro Fernández Rojas 2021-02-23 16:01 ` Álvaro Fernández Rojas 2021-02-23 16:36 ` Florian Fainelli 2021-02-23 16:36 ` Florian Fainelli 2021-02-23 17:17 ` Scott Branden 2021-02-23 17:17 ` Scott Branden 2021-02-23 17:22 ` Álvaro Fernández Rojas 2021-02-23 17:22 ` Álvaro Fernández Rojas 2021-02-23 16:01 ` [PATCH 2/2] hwrng: bcm2835: add " Álvaro Fernández Rojas 2021-02-23 16:01 ` Álvaro Fernández Rojas 2021-02-24 8:22 ` [PATCH v4 0/2] " Álvaro Fernández Rojas 2021-02-24 8:22 ` Álvaro Fernández Rojas 2021-02-24 8:22 ` [PATCH v4 1/2] dt-bindings: rng: bcm2835: document " Álvaro Fernández Rojas 2021-02-24 8:22 ` Álvaro Fernández Rojas 2021-02-24 8:22 ` Álvaro Fernández Rojas [this message] 2021-02-24 8:22 ` [PATCH v4 2/2] hwrng: bcm2835: add " Álvaro Fernández Rojas 2021-03-03 13:52 ` Philipp Zabel 2021-03-03 13:52 ` Philipp Zabel 2021-03-03 14:06 ` Álvaro Fernández Rojas 2021-03-03 14:06 ` Álvaro Fernández Rojas 2021-03-03 19:16 ` Florian Fainelli 2021-03-03 19:16 ` Florian Fainelli 2021-02-23 17:00 ` [PATCH v3 0/2] " Álvaro Fernández Rojas 2021-02-23 17:00 ` Álvaro Fernández Rojas 2021-02-23 17:00 ` [PATCH v3 1/2] dt-bindings: rng: bcm2835: document " Álvaro Fernández Rojas 2021-02-23 17:00 ` Álvaro Fernández Rojas 2021-02-23 19:34 ` Rob Herring 2021-02-23 19:34 ` Rob Herring 2021-02-23 20:48 ` Álvaro Fernández Rojas 2021-02-23 20:48 ` Álvaro Fernández Rojas 2021-03-04 12:07 ` Nicolas Saenz Julienne 2021-03-04 12:07 ` Nicolas Saenz Julienne 2021-03-04 12:18 ` Álvaro Fernández Rojas 2021-03-04 12:18 ` Álvaro Fernández Rojas 2021-03-04 13:30 ` Nicolas Saenz Julienne 2021-03-04 13:30 ` Nicolas Saenz Julienne 2021-03-04 14:57 ` Álvaro Fernández Rojas 2021-03-04 14:57 ` Álvaro Fernández Rojas 2021-03-04 19:58 ` Rob Herring 2021-03-04 19:58 ` Rob Herring 2021-02-23 17:00 ` [PATCH v3 2/2] hwrng: bcm2835: add " Álvaro Fernández Rojas 2021-02-23 17:00 ` Álvaro Fernández Rojas 2021-02-23 20:43 ` Florian Fainelli 2021-02-23 20:43 ` Florian Fainelli
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20210224082230.29015-3-noltari@gmail.com \ --to=noltari@gmail.com \ --cc=bcm-kernel-feedback-list@broadcom.com \ --cc=bjorn.andersson@linaro.org \ --cc=broonie@kernel.org \ --cc=devicetree@vger.kernel.org \ --cc=f.fainelli@gmail.com \ --cc=herbert@gondor.apana.org.au \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-crypto@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-rpi-kernel@lists.infradead.org \ --cc=linux@roeck-us.net \ --cc=mpm@selenic.com \ --cc=nfraprado@protonmail.com \ --cc=nsaenzjulienne@suse.de \ --cc=p.zabel@pengutronix.de \ --cc=rikard.falkeborn@gmail.com \ --cc=rjui@broadcom.com \ --cc=robh+dt@kernel.org \ --cc=sbranden@broadcom.com \ --cc=stefan.wahren@i2se.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.