From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752461AbdKHSb1 (ORCPT ); Wed, 8 Nov 2017 13:31:27 -0500 Received: from anholt.net ([50.246.234.109]:52762 "EHLO anholt.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751831AbdKHSbZ (ORCPT ); Wed, 8 Nov 2017 13:31:25 -0500 From: Eric Anholt To: Florian Fainelli , linux-kernel@vger.kernel.org Cc: Florian Fainelli , Matt Mackall , Herbert Xu , Rob Herring , Mark Rutland , Ray Jui , Scott Branden , "maintainer\:BROADCOM BCM281XX\/BCM11XXX\/BCM216XX ARM ARCHITE..." , Stefan Wahren , PrasannaKumar Muralidharan , Russell King , Krzysztof Kozlowski , Harald Freudenberger , Sean Wang , Martin Kaiser , Steffen Trumtrar , "open list\:HARDWARE RANDOM NUMBER GENERATOR CORE" , "open list\:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" , "moderated list\:BROADCOM BCM2835 ARM ARCHITECTURE" , "moderated list\:BRO ADCOM BCM2835 ARM ARCHITECTURE" Subject: Re: [PATCH v2 07/12] hwrng: bcm2835-rng: Manage an optional clock In-Reply-To: <20171108004449.32730-8-f.fainelli@gmail.com> References: <20171108004449.32730-1-f.fainelli@gmail.com> <20171108004449.32730-8-f.fainelli@gmail.com> User-Agent: Notmuch/0.22.2+1~gb0bcfaa (http://notmuchmail.org) Emacs/25.2.2 (x86_64-pc-linux-gnu) Date: Wed, 08 Nov 2017 10:31:21 -0800 Message-ID: <87h8u4y64m.fsf@anholt.net> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha512; protocol="application/pgp-signature" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --=-=-= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Florian Fainelli writes: > One of the last steps before bcm63xx-rng can be eliminated is to manage > a clock during hwrng::init and hwrng::cleanup, so fetch it in the probe > function, and manage it during these two steps when valid. > > Signed-off-by: Florian Fainelli > --- > drivers/char/hw_random/bcm2835-rng.c | 17 ++++++++++++++++- > 1 file changed, 16 insertions(+), 1 deletion(-) > > diff --git a/drivers/char/hw_random/bcm2835-rng.c b/drivers/char/hw_rando= m/bcm2835-rng.c > index ed20e0b6b7ae..99b56fd5482c 100644 > --- a/drivers/char/hw_random/bcm2835-rng.c > +++ b/drivers/char/hw_random/bcm2835-rng.c > @@ -15,6 +15,7 @@ > #include > #include > #include > +#include >=20=20 > #define RNG_CTRL 0x0 > #define RNG_STATUS 0x4 > @@ -33,6 +34,7 @@ struct bcm2835_rng_priv { > struct hwrng rng; > void __iomem *base; > bool mask_interrupts; > + struct clk *clk; > }; >=20=20 > static inline struct bcm2835_rng_priv *to_rng_priv(struct hwrng *rng) > @@ -66,8 +68,15 @@ static int bcm2835_rng_read(struct hwrng *rng, void *b= uf, size_t max, > static int bcm2835_rng_init(struct hwrng *rng) > { > struct bcm2835_rng_priv *priv =3D to_rng_priv(rng); > + int ret =3D 0; > u32 val; >=20=20 > + if (!IS_ERR(priv->clk)) { > + ret =3D clk_prepare_enable(priv->clk); > + if (ret) > + return ret; > + } clk_prepare_enable() is protected by IS_ERR_OR_NULL() checks and will return 0. > + > if (priv->mask_interrupts) { > /* mask the interrupt */ > val =3D readl(priv->base + RNG_INT_MASK); > @@ -79,7 +88,7 @@ static int bcm2835_rng_init(struct hwrng *rng) > __raw_writel(RNG_WARMUP_COUNT, priv->base + RNG_STATUS); > __raw_writel(RNG_RBGEN, priv->base + RNG_CTRL); >=20=20 > - return 0; > + return ret; > } >=20=20 > static void bcm2835_rng_cleanup(struct hwrng *rng) > @@ -88,6 +97,9 @@ static void bcm2835_rng_cleanup(struct hwrng *rng) >=20=20 > /* disable rng hardware */ > __raw_writel(0, priv->base + RNG_CTRL); > + > + if (!IS_ERR(priv->clk)) > + clk_disable_unprepare(priv->clk); Same. With those conditionals dropped, Reviewed-by: Eric Anholt --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEE/JuuFDWp9/ZkuCBXtdYpNtH8nugFAloDTXkACgkQtdYpNtH8 nug4ew//aMhW/2UYN2aRM8WjSTui9ZoPuGHS+Jdqzv487eBxNCq6dRLH7vkVUgJi QKcd7IN8+3pzDo7qBa23l00z0KokTPDn/rUui31zT/vABveflIxekCwyJX8GDvdO MWf2AbCdUokpYctCwB0zlF9ouJmow1X3H6E4mTyeDoli7p0jF2qVObSMWiOMU1ib YRts17lMB7SKAYQOk7Rnr8KRU9c0AMfNTNWyWzFGUfMUM3BKyWDNaVahovyFSNYU 9ekTXoKqVqdJY1HMEivAhUQJn8pG1ZhqiDACCbgP9YwRZxILiu5695SXDdPj/tPs CJSopSz14BHXrQIPD1qjsdR0giLv6TxZ9Y573KHOuXBNZcP1X6/IkjyRdKOnd00S E4aCzjOGbKtEUUy585cx8Y1HdGtmQEzpYfEjKFsh3DZ9FwElKRiC5NChoSw8Kgta 6rEevvVp2JI+toRuZEfYEFQaLcz1czF/obMy3O6dI5mOcpkm0Adv3CfzYJ0RWIQc wl/teuoCPO4GqOYVlYEYBVm7TtBkivSaoP9ebK+VZYtcAMmmK+VCwv+fYSvEjrwB bzmJOdtbHajrlBIGEpRu+jGGFWziQ4XLpc1KnqJcSJJxfKJEcx/Fo3xPZH57B1y1 ZKsd6gg55WvjjvXAVXvvluy3Qythv9gcdaYZNtUQE3JZwIzH+3Q= =VErG -----END PGP SIGNATURE----- --=-=-=--