From: PrasannaKumar Muralidharan <prasannatsmkumar@gmail.com> To: Heiner Kallweit <hkallweit1@gmail.com> Cc: Kevin Hilman <khilman@baylibre.com>, Herbert Xu <herbert@gondor.apana.org.au>, Neil Armstrong <narmstrong@baylibre.com>, linux-amlogic@lists.infradead.org, linux-crypto@vger.kernel.org Subject: Re: [PATCH 2/2] hwrng: meson: add clock handling to driver Date: Mon, 20 Feb 2017 17:07:23 +0530 [thread overview] Message-ID: <CANc+2y6hYB_raW0TigeMbBm8C3JXEUUnSOTjNLcSs9FESQNTXg@mail.gmail.com> (raw) In-Reply-To: <eff6bfbe-3257-5d74-35c7-226a29c61fcb@gmail.com> On 20 February 2017 at 02:05, Heiner Kallweit <hkallweit1@gmail.com> wrote: > Add handling of RNG0 clock to the driver. > > Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> > --- > drivers/char/hw_random/meson-rng.c | 27 ++++++++++++++++++++++++++- > 1 file changed, 26 insertions(+), 1 deletion(-) > > diff --git a/drivers/char/hw_random/meson-rng.c b/drivers/char/hw_random/meson-rng.c > index 119d6984..1f586e48 100644 > --- a/drivers/char/hw_random/meson-rng.c > +++ b/drivers/char/hw_random/meson-rng.c > @@ -62,6 +62,7 @@ > #include <linux/slab.h> > #include <linux/types.h> > #include <linux/of.h> > +#include <linux/clk.h> > > #define RNG_DATA 0x00 > > @@ -69,6 +70,7 @@ struct meson_rng_data { > void __iomem *base; > struct platform_device *pdev; > struct hwrng rng; > + struct clk *core_clk; > }; > > static int meson_rng_read(struct hwrng *rng, void *buf, size_t max, bool wait) > @@ -86,6 +88,7 @@ static int meson_rng_probe(struct platform_device *pdev) > struct device *dev = &pdev->dev; > struct meson_rng_data *data; > struct resource *res; > + int ret; Variable ret is not used. It can be removed. > data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); > if (!data) > @@ -98,12 +101,33 @@ static int meson_rng_probe(struct platform_device *pdev) > if (IS_ERR(data->base)) > return PTR_ERR(data->base); > > + data->core_clk = devm_clk_get(dev, "core"); > + if (IS_ERR(data->core_clk)) > + return PTR_ERR(data->core_clk); > + > + ret = clk_prepare_enable(data->core_clk); > + if (ret) > + return ret; > + > data->rng.name = pdev->name; > data->rng.read = meson_rng_read; > > platform_set_drvdata(pdev, data); > > - return devm_hwrng_register(dev, &data->rng); > + ret = devm_hwrng_register(dev, &data->rng); > + if (ret) > + clk_disable_unprepare(data->core_clk); > + > + return ret; > +} > + > +static int meson_rng_remove(struct platform_device *pdev) > +{ > + struct meson_rng_data *data = platform_get_drvdata(pdev); > + > + clk_disable_unprepare(data->core_clk); > + > + return 0; > } In .remove clock gets disabled before the hwrng_unregister is called. The device node '/dev/hwrng' could be accessed while meson_rng_remove is called which could lead to problems. Instead of devm_hwrng_register use hwrng_register in .probe and call hwrng_unregister in .remove. > static const struct of_device_id meson_rng_of_match[] = { > @@ -114,6 +138,7 @@ MODULE_DEVICE_TABLE(of, meson_rng_of_match); > > static struct platform_driver meson_rng_driver = { > .probe = meson_rng_probe, > + .remove = meson_rng_remove, > .driver = { > .name = "meson-rng", > .of_match_table = meson_rng_of_match, > -- > 2.11.1 > >
WARNING: multiple messages have this Message-ID (diff)
From: prasannatsmkumar@gmail.com (PrasannaKumar Muralidharan) To: linus-amlogic@lists.infradead.org Subject: [PATCH 2/2] hwrng: meson: add clock handling to driver Date: Mon, 20 Feb 2017 17:07:23 +0530 [thread overview] Message-ID: <CANc+2y6hYB_raW0TigeMbBm8C3JXEUUnSOTjNLcSs9FESQNTXg@mail.gmail.com> (raw) In-Reply-To: <eff6bfbe-3257-5d74-35c7-226a29c61fcb@gmail.com> On 20 February 2017 at 02:05, Heiner Kallweit <hkallweit1@gmail.com> wrote: > Add handling of RNG0 clock to the driver. > > Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> > --- > drivers/char/hw_random/meson-rng.c | 27 ++++++++++++++++++++++++++- > 1 file changed, 26 insertions(+), 1 deletion(-) > > diff --git a/drivers/char/hw_random/meson-rng.c b/drivers/char/hw_random/meson-rng.c > index 119d6984..1f586e48 100644 > --- a/drivers/char/hw_random/meson-rng.c > +++ b/drivers/char/hw_random/meson-rng.c > @@ -62,6 +62,7 @@ > #include <linux/slab.h> > #include <linux/types.h> > #include <linux/of.h> > +#include <linux/clk.h> > > #define RNG_DATA 0x00 > > @@ -69,6 +70,7 @@ struct meson_rng_data { > void __iomem *base; > struct platform_device *pdev; > struct hwrng rng; > + struct clk *core_clk; > }; > > static int meson_rng_read(struct hwrng *rng, void *buf, size_t max, bool wait) > @@ -86,6 +88,7 @@ static int meson_rng_probe(struct platform_device *pdev) > struct device *dev = &pdev->dev; > struct meson_rng_data *data; > struct resource *res; > + int ret; Variable ret is not used. It can be removed. > data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); > if (!data) > @@ -98,12 +101,33 @@ static int meson_rng_probe(struct platform_device *pdev) > if (IS_ERR(data->base)) > return PTR_ERR(data->base); > > + data->core_clk = devm_clk_get(dev, "core"); > + if (IS_ERR(data->core_clk)) > + return PTR_ERR(data->core_clk); > + > + ret = clk_prepare_enable(data->core_clk); > + if (ret) > + return ret; > + > data->rng.name = pdev->name; > data->rng.read = meson_rng_read; > > platform_set_drvdata(pdev, data); > > - return devm_hwrng_register(dev, &data->rng); > + ret = devm_hwrng_register(dev, &data->rng); > + if (ret) > + clk_disable_unprepare(data->core_clk); > + > + return ret; > +} > + > +static int meson_rng_remove(struct platform_device *pdev) > +{ > + struct meson_rng_data *data = platform_get_drvdata(pdev); > + > + clk_disable_unprepare(data->core_clk); > + > + return 0; > } In .remove clock gets disabled before the hwrng_unregister is called. The device node '/dev/hwrng' could be accessed while meson_rng_remove is called which could lead to problems. Instead of devm_hwrng_register use hwrng_register in .probe and call hwrng_unregister in .remove. > static const struct of_device_id meson_rng_of_match[] = { > @@ -114,6 +138,7 @@ MODULE_DEVICE_TABLE(of, meson_rng_of_match); > > static struct platform_driver meson_rng_driver = { > .probe = meson_rng_probe, > + .remove = meson_rng_remove, > .driver = { > .name = "meson-rng", > .of_match_table = meson_rng_of_match, > -- > 2.11.1 > >
next prev parent reply other threads:[~2017-02-20 11:37 UTC|newest] Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top 2017-02-19 20:30 [PATCH 0/2] hwrng: meson: add clock handling Heiner Kallweit 2017-02-19 20:30 ` Heiner Kallweit 2017-02-19 20:33 ` [PATCH 1/2] hwrng: meson: expose RNG0 clock via DT Heiner Kallweit 2017-02-19 20:33 ` Heiner Kallweit 2017-02-20 10:07 ` Jerome Brunet 2017-02-20 10:07 ` Jerome Brunet 2017-02-19 20:35 ` [PATCH 2/2] hwrng: meson: add clock handling to driver Heiner Kallweit 2017-02-19 20:35 ` Heiner Kallweit 2017-02-20 11:37 ` PrasannaKumar Muralidharan [this message] 2017-02-20 11:37 ` PrasannaKumar Muralidharan 2017-02-21 1:58 ` [PATCH 0/2] hwrng: meson: add clock handling Neil Armstrong 2017-02-21 1:58 ` Neil Armstrong
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=CANc+2y6hYB_raW0TigeMbBm8C3JXEUUnSOTjNLcSs9FESQNTXg@mail.gmail.com \ --to=prasannatsmkumar@gmail.com \ --cc=herbert@gondor.apana.org.au \ --cc=hkallweit1@gmail.com \ --cc=khilman@baylibre.com \ --cc=linux-amlogic@lists.infradead.org \ --cc=linux-crypto@vger.kernel.org \ --cc=narmstrong@baylibre.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.