From: Tony Lindgren <tony@atomide.com>
To: "Pali Rohár" <pali.rohar@gmail.com>
Cc: Matt Mackall <mpm@selenic.com>,
Herbert Xu <herbert@gondor.apana.org.au>,
Russell King <linux@arm.linux.org.uk>,
Joe Perches <joe@perches.com>,
Aaro Koskinen <aaro.koskinen@iki.fi>,
linux-omap@vger.kernel.org, linux-kernel@vger.kernel.org,
Juha Yrjola <juha.yrjola@solidboot.com>
Subject: Re: [PATCH v2 2/3] hwrng: OMAP3 ROM Random Number Generator support
Date: Tue, 8 Oct 2013 12:04:09 -0700 [thread overview]
Message-ID: <20131008190408.GM8313@atomide.com> (raw)
In-Reply-To: <1379683507-30793-3-git-send-email-pali.rohar@gmail.com>
* Pali Rohár <pali.rohar@gmail.com> [130920 06:33]:
> This driver provides kernel-side support for the Random Number
> Generator hardware found on OMAP34xx processors.
>
> This driver comes from Maemo 2.6.28 kernel and was tested on Nokia RX-51.
> It is platform device because it needs board specific function for smc calls.
This one is should be merged via the hw_random patches seprately:
Acked-by: Tony Lindgren <tony@atomide.com>
> Signed-off-by: Pali Rohár <pali.rohar@gmail.com>
> Signed-off-by: Juha Yrjola <juha.yrjola@solidboot.com>
> ---
> drivers/char/hw_random/Kconfig | 13 +++
> drivers/char/hw_random/Makefile | 1 +
> drivers/char/hw_random/omap3-rom-rng.c | 141 ++++++++++++++++++++++++++++++++
> 3 files changed, 155 insertions(+)
> create mode 100644 drivers/char/hw_random/omap3-rom-rng.c
>
> diff --git a/drivers/char/hw_random/Kconfig b/drivers/char/hw_random/Kconfig
> index 0aa9d91..0a331c3 100644
> --- a/drivers/char/hw_random/Kconfig
> +++ b/drivers/char/hw_random/Kconfig
> @@ -165,6 +165,19 @@ config HW_RANDOM_OMAP
>
> If unsure, say Y.
>
> +config HW_RANDOM_OMAP3_ROM
> + tristate "OMAP3 ROM Random Number Generator support"
> + depends on HW_RANDOM && ARCH_OMAP3
> + default HW_RANDOM
> + ---help---
> + This driver provides kernel-side support for the Random Number
> + Generator hardware found on OMAP34xx processors.
> +
> + To compile this driver as a module, choose M here: the
> + module will be called omap3-rom-rng.
> +
> + If unsure, say Y.
> +
> config HW_RANDOM_OCTEON
> tristate "Octeon Random Number Generator support"
> depends on HW_RANDOM && CAVIUM_OCTEON_SOC
> diff --git a/drivers/char/hw_random/Makefile b/drivers/char/hw_random/Makefile
> index bed467c..7c8aa80 100644
> --- a/drivers/char/hw_random/Makefile
> +++ b/drivers/char/hw_random/Makefile
> @@ -15,6 +15,7 @@ n2-rng-y := n2-drv.o n2-asm.o
> obj-$(CONFIG_HW_RANDOM_VIA) += via-rng.o
> obj-$(CONFIG_HW_RANDOM_IXP4XX) += ixp4xx-rng.o
> obj-$(CONFIG_HW_RANDOM_OMAP) += omap-rng.o
> +obj-$(CONFIG_HW_RANDOM_OMAP3_ROM) += omap3-rom-rng.o
> obj-$(CONFIG_HW_RANDOM_PASEMI) += pasemi-rng.o
> obj-$(CONFIG_HW_RANDOM_VIRTIO) += virtio-rng.o
> obj-$(CONFIG_HW_RANDOM_TX4939) += tx4939-rng.o
> diff --git a/drivers/char/hw_random/omap3-rom-rng.c b/drivers/char/hw_random/omap3-rom-rng.c
> new file mode 100644
> index 0000000..c853e9e
> --- /dev/null
> +++ b/drivers/char/hw_random/omap3-rom-rng.c
> @@ -0,0 +1,141 @@
> +/*
> + * omap3-rom-rng.c - RNG driver for TI OMAP3 CPU family
> + *
> + * Copyright (C) 2009 Nokia Corporation
> + * Author: Juha Yrjola <juha.yrjola@solidboot.com>
> + *
> + * Copyright (C) 2013 Pali Rohár <pali.rohar@gmail.com>
> + *
> + * This file is licensed under the terms of the GNU General Public
> + * License version 2. This program is licensed "as is" without any
> + * warranty of any kind, whether express or implied.
> + */
> +
> +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
> +
> +#include <linux/module.h>
> +#include <linux/init.h>
> +#include <linux/random.h>
> +#include <linux/hw_random.h>
> +#include <linux/timer.h>
> +#include <linux/clk.h>
> +#include <linux/err.h>
> +#include <linux/platform_device.h>
> +
> +#define RNG_RESET 0x01
> +#define RNG_GEN_PRNG_HW_INIT 0x02
> +#define RNG_GEN_HW 0x08
> +
> +/* param1: ptr, param2: count, param3: flag */
> +static u32 (*omap3_rom_rng_call)(u32, u32, u32);
> +
> +static struct timer_list idle_timer;
> +static int rng_idle;
> +static struct clk *rng_clk;
> +
> +static void omap3_rom_rng_idle(unsigned long data)
> +{
> + int r;
> +
> + r = omap3_rom_rng_call(0, 0, RNG_RESET);
> + if (r != 0) {
> + pr_err("reset failed: %d\n", r);
> + return;
> + }
> + clk_disable_unprepare(rng_clk);
> + rng_idle = 1;
> +}
> +
> +static int omap3_rom_rng_get_random(void *buf, unsigned int count)
> +{
> + u32 r;
> + u32 ptr;
> +
> + del_timer_sync(&idle_timer);
> + if (rng_idle) {
> + clk_prepare_enable(rng_clk);
> + r = omap3_rom_rng_call(0, 0, RNG_GEN_PRNG_HW_INIT);
> + if (r != 0) {
> + clk_disable_unprepare(rng_clk);
> + pr_err("HW init failed: %d\n", r);
> + return -EIO;
> + }
> + rng_idle = 0;
> + }
> +
> + ptr = virt_to_phys(buf);
> + r = omap3_rom_rng_call(ptr, count, RNG_GEN_HW);
> + mod_timer(&idle_timer, jiffies + msecs_to_jiffies(500));
> + if (r != 0)
> + return -EINVAL;
> + return 0;
> +}
> +
> +static int omap3_rom_rng_data_present(struct hwrng *rng, int wait)
> +{
> + return 1;
> +}
> +
> +static int omap3_rom_rng_data_read(struct hwrng *rng, u32 *data)
> +{
> + int r;
> +
> + r = omap3_rom_rng_get_random(data, 4);
> + if (r < 0)
> + return r;
> + return 4;
> +}
> +
> +static struct hwrng omap3_rom_rng_ops = {
> + .name = "omap3-rom",
> + .data_present = omap3_rom_rng_data_present,
> + .data_read = omap3_rom_rng_data_read,
> +};
> +
> +static int omap3_rom_rng_probe(struct platform_device *pdev)
> +{
> + pr_info("initializing\n");
> +
> + omap3_rom_rng_call = pdev->dev.platform_data;
> + if (!omap3_rom_rng_call) {
> + pr_err("omap3_rom_rng_call is NULL\n");
> + return -EINVAL;
> + }
> +
> + setup_timer(&idle_timer, omap3_rom_rng_idle, 0);
> + rng_clk = clk_get(&pdev->dev, "ick");
> + if (IS_ERR(rng_clk)) {
> + pr_err("unable to get RNG clock\n");
> + return PTR_ERR(rng_clk);
> + }
> +
> + /* Leave the RNG in reset state. */
> + clk_prepare_enable(rng_clk);
> + omap3_rom_rng_idle(0);
> +
> + return hwrng_register(&omap3_rom_rng_ops);
> +}
> +
> +static int omap3_rom_rng_remove(struct platform_device *pdev)
> +{
> + hwrng_unregister(&omap3_rom_rng_ops);
> + clk_disable_unprepare(rng_clk);
> + clk_put(rng_clk);
> + return 0;
> +}
> +
> +static struct platform_driver omap3_rom_rng_driver = {
> + .driver = {
> + .name = "omap3-rom-rng",
> + .owner = THIS_MODULE,
> + },
> + .probe = omap3_rom_rng_probe,
> + .remove = omap3_rom_rng_remove,
> +};
> +
> +module_platform_driver(omap3_rom_rng_driver);
> +
> +MODULE_ALIAS("platform:omap3-rom-rng");
> +MODULE_AUTHOR("Juha Yrjola");
> +MODULE_AUTHOR("Pali Rohár <pali.rohar@gmail.com>");
> +MODULE_LICENSE("GPL");
> --
> 1.7.10.4
>
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
WARNING: multiple messages have this Message-ID (diff)
From: Tony Lindgren <tony@atomide.com>
To: "Pali Rohár" <pali.rohar@gmail.com>
Cc: Matt Mackall <mpm@selenic.com>,
Herbert Xu <herbert@gondor.hengli.com.au>,
Russell King <linux@arm.linux.org.uk>,
Joe Perches <joe@perches.com>,
Aaro Koskinen <aaro.koskinen@iki.fi>,
linux-omap@vger.kernel.org, linux-kernel@vger.kernel.org,
Juha Yrjola <juha.yrjola@solidboot.com>
Subject: Re: [PATCH v2 2/3] hwrng: OMAP3 ROM Random Number Generator support
Date: Tue, 8 Oct 2013 12:04:09 -0700 [thread overview]
Message-ID: <20131008190408.GM8313@atomide.com> (raw)
In-Reply-To: <1379683507-30793-3-git-send-email-pali.rohar@gmail.com>
* Pali Rohár <pali.rohar@gmail.com> [130920 06:33]:
> This driver provides kernel-side support for the Random Number
> Generator hardware found on OMAP34xx processors.
>
> This driver comes from Maemo 2.6.28 kernel and was tested on Nokia RX-51.
> It is platform device because it needs board specific function for smc calls.
This one is should be merged via the hw_random patches seprately:
Acked-by: Tony Lindgren <tony@atomide.com>
> Signed-off-by: Pali Rohár <pali.rohar@gmail.com>
> Signed-off-by: Juha Yrjola <juha.yrjola@solidboot.com>
> ---
> drivers/char/hw_random/Kconfig | 13 +++
> drivers/char/hw_random/Makefile | 1 +
> drivers/char/hw_random/omap3-rom-rng.c | 141 ++++++++++++++++++++++++++++++++
> 3 files changed, 155 insertions(+)
> create mode 100644 drivers/char/hw_random/omap3-rom-rng.c
>
> diff --git a/drivers/char/hw_random/Kconfig b/drivers/char/hw_random/Kconfig
> index 0aa9d91..0a331c3 100644
> --- a/drivers/char/hw_random/Kconfig
> +++ b/drivers/char/hw_random/Kconfig
> @@ -165,6 +165,19 @@ config HW_RANDOM_OMAP
>
> If unsure, say Y.
>
> +config HW_RANDOM_OMAP3_ROM
> + tristate "OMAP3 ROM Random Number Generator support"
> + depends on HW_RANDOM && ARCH_OMAP3
> + default HW_RANDOM
> + ---help---
> + This driver provides kernel-side support for the Random Number
> + Generator hardware found on OMAP34xx processors.
> +
> + To compile this driver as a module, choose M here: the
> + module will be called omap3-rom-rng.
> +
> + If unsure, say Y.
> +
> config HW_RANDOM_OCTEON
> tristate "Octeon Random Number Generator support"
> depends on HW_RANDOM && CAVIUM_OCTEON_SOC
> diff --git a/drivers/char/hw_random/Makefile b/drivers/char/hw_random/Makefile
> index bed467c..7c8aa80 100644
> --- a/drivers/char/hw_random/Makefile
> +++ b/drivers/char/hw_random/Makefile
> @@ -15,6 +15,7 @@ n2-rng-y := n2-drv.o n2-asm.o
> obj-$(CONFIG_HW_RANDOM_VIA) += via-rng.o
> obj-$(CONFIG_HW_RANDOM_IXP4XX) += ixp4xx-rng.o
> obj-$(CONFIG_HW_RANDOM_OMAP) += omap-rng.o
> +obj-$(CONFIG_HW_RANDOM_OMAP3_ROM) += omap3-rom-rng.o
> obj-$(CONFIG_HW_RANDOM_PASEMI) += pasemi-rng.o
> obj-$(CONFIG_HW_RANDOM_VIRTIO) += virtio-rng.o
> obj-$(CONFIG_HW_RANDOM_TX4939) += tx4939-rng.o
> diff --git a/drivers/char/hw_random/omap3-rom-rng.c b/drivers/char/hw_random/omap3-rom-rng.c
> new file mode 100644
> index 0000000..c853e9e
> --- /dev/null
> +++ b/drivers/char/hw_random/omap3-rom-rng.c
> @@ -0,0 +1,141 @@
> +/*
> + * omap3-rom-rng.c - RNG driver for TI OMAP3 CPU family
> + *
> + * Copyright (C) 2009 Nokia Corporation
> + * Author: Juha Yrjola <juha.yrjola@solidboot.com>
> + *
> + * Copyright (C) 2013 Pali Rohár <pali.rohar@gmail.com>
> + *
> + * This file is licensed under the terms of the GNU General Public
> + * License version 2. This program is licensed "as is" without any
> + * warranty of any kind, whether express or implied.
> + */
> +
> +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
> +
> +#include <linux/module.h>
> +#include <linux/init.h>
> +#include <linux/random.h>
> +#include <linux/hw_random.h>
> +#include <linux/timer.h>
> +#include <linux/clk.h>
> +#include <linux/err.h>
> +#include <linux/platform_device.h>
> +
> +#define RNG_RESET 0x01
> +#define RNG_GEN_PRNG_HW_INIT 0x02
> +#define RNG_GEN_HW 0x08
> +
> +/* param1: ptr, param2: count, param3: flag */
> +static u32 (*omap3_rom_rng_call)(u32, u32, u32);
> +
> +static struct timer_list idle_timer;
> +static int rng_idle;
> +static struct clk *rng_clk;
> +
> +static void omap3_rom_rng_idle(unsigned long data)
> +{
> + int r;
> +
> + r = omap3_rom_rng_call(0, 0, RNG_RESET);
> + if (r != 0) {
> + pr_err("reset failed: %d\n", r);
> + return;
> + }
> + clk_disable_unprepare(rng_clk);
> + rng_idle = 1;
> +}
> +
> +static int omap3_rom_rng_get_random(void *buf, unsigned int count)
> +{
> + u32 r;
> + u32 ptr;
> +
> + del_timer_sync(&idle_timer);
> + if (rng_idle) {
> + clk_prepare_enable(rng_clk);
> + r = omap3_rom_rng_call(0, 0, RNG_GEN_PRNG_HW_INIT);
> + if (r != 0) {
> + clk_disable_unprepare(rng_clk);
> + pr_err("HW init failed: %d\n", r);
> + return -EIO;
> + }
> + rng_idle = 0;
> + }
> +
> + ptr = virt_to_phys(buf);
> + r = omap3_rom_rng_call(ptr, count, RNG_GEN_HW);
> + mod_timer(&idle_timer, jiffies + msecs_to_jiffies(500));
> + if (r != 0)
> + return -EINVAL;
> + return 0;
> +}
> +
> +static int omap3_rom_rng_data_present(struct hwrng *rng, int wait)
> +{
> + return 1;
> +}
> +
> +static int omap3_rom_rng_data_read(struct hwrng *rng, u32 *data)
> +{
> + int r;
> +
> + r = omap3_rom_rng_get_random(data, 4);
> + if (r < 0)
> + return r;
> + return 4;
> +}
> +
> +static struct hwrng omap3_rom_rng_ops = {
> + .name = "omap3-rom",
> + .data_present = omap3_rom_rng_data_present,
> + .data_read = omap3_rom_rng_data_read,
> +};
> +
> +static int omap3_rom_rng_probe(struct platform_device *pdev)
> +{
> + pr_info("initializing\n");
> +
> + omap3_rom_rng_call = pdev->dev.platform_data;
> + if (!omap3_rom_rng_call) {
> + pr_err("omap3_rom_rng_call is NULL\n");
> + return -EINVAL;
> + }
> +
> + setup_timer(&idle_timer, omap3_rom_rng_idle, 0);
> + rng_clk = clk_get(&pdev->dev, "ick");
> + if (IS_ERR(rng_clk)) {
> + pr_err("unable to get RNG clock\n");
> + return PTR_ERR(rng_clk);
> + }
> +
> + /* Leave the RNG in reset state. */
> + clk_prepare_enable(rng_clk);
> + omap3_rom_rng_idle(0);
> +
> + return hwrng_register(&omap3_rom_rng_ops);
> +}
> +
> +static int omap3_rom_rng_remove(struct platform_device *pdev)
> +{
> + hwrng_unregister(&omap3_rom_rng_ops);
> + clk_disable_unprepare(rng_clk);
> + clk_put(rng_clk);
> + return 0;
> +}
> +
> +static struct platform_driver omap3_rom_rng_driver = {
> + .driver = {
> + .name = "omap3-rom-rng",
> + .owner = THIS_MODULE,
> + },
> + .probe = omap3_rom_rng_probe,
> + .remove = omap3_rom_rng_remove,
> +};
> +
> +module_platform_driver(omap3_rom_rng_driver);
> +
> +MODULE_ALIAS("platform:omap3-rom-rng");
> +MODULE_AUTHOR("Juha Yrjola");
> +MODULE_AUTHOR("Pali Rohár <pali.rohar@gmail.com>");
> +MODULE_LICENSE("GPL");
> --
> 1.7.10.4
>
next prev parent reply other threads:[~2013-10-08 19:04 UTC|newest]
Thread overview: 65+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-28 18:05 [PATCH] OMAP3 ROM Random Number Generator support Pali Rohár
2013-02-28 18:05 ` Pali Rohár
2013-03-24 14:15 ` Pali Rohár
2013-03-24 14:15 ` Pali Rohár
2013-03-27 21:09 ` Tony Lindgren
2013-03-27 21:09 ` Tony Lindgren
2013-03-27 22:03 ` Pali Rohár
2013-03-27 22:03 ` Pali Rohár
2013-03-27 22:25 ` Tony Lindgren
2013-03-27 22:25 ` Tony Lindgren
2013-03-28 17:54 ` Pali Rohár
2013-03-28 17:54 ` Pali Rohár
2013-03-28 21:44 ` Tony Lindgren
2013-03-28 21:44 ` Tony Lindgren
2013-03-31 9:28 ` Pali Rohár
2013-03-31 9:28 ` Pali Rohár
2013-04-01 16:25 ` Tony Lindgren
2013-04-01 16:25 ` Tony Lindgren
2013-09-18 20:05 ` [PATCH 0/2] " Pali Rohár
2013-09-18 20:05 ` Pali Rohár
2013-09-18 20:05 ` [PATCH 1/2] hwrng: " Pali Rohár
2013-09-18 20:05 ` Pali Rohár
2013-09-18 20:22 ` Joe Perches
2013-09-18 20:22 ` Joe Perches
2013-09-18 20:50 ` Aaro Koskinen
2013-09-18 20:50 ` Aaro Koskinen
2013-09-18 20:05 ` [PATCH 2/2] RX-51: Add support for OMAP3 ROM Random Number Generator Pali Rohár
2013-09-18 20:05 ` Pali Rohár
2013-09-18 20:39 ` Tony Lindgren
2013-09-18 20:39 ` Tony Lindgren
2013-09-20 13:25 ` [PATCH v2 0/3] OMAP3 ROM Random Number Generator support Pali Rohár
2013-09-20 13:25 ` Pali Rohár
2013-09-20 13:25 ` [PATCH v2 1/3] omap2: Change clk dev id for rng to omap3-rom-rng Pali Rohár
2013-09-20 13:25 ` Pali Rohár
2013-09-20 16:23 ` Tony Lindgren
2013-09-20 16:23 ` Tony Lindgren
2013-09-20 16:41 ` Pali Rohár
2013-09-20 16:41 ` Pali Rohár
2013-09-20 17:46 ` Tony Lindgren
2013-09-20 17:46 ` Tony Lindgren
2013-09-20 18:24 ` Pali Rohár
2013-09-20 18:24 ` Pali Rohár
2013-09-20 18:31 ` Tony Lindgren
2013-09-20 18:31 ` Tony Lindgren
2013-09-20 13:25 ` [PATCH v2 2/3] hwrng: OMAP3 ROM Random Number Generator support Pali Rohár
2013-09-20 13:25 ` Pali Rohár
2013-10-08 19:04 ` Tony Lindgren [this message]
2013-10-08 19:04 ` Tony Lindgren
2013-10-16 12:57 ` Herbert Xu
2013-10-16 12:57 ` Herbert Xu
2013-11-18 21:51 ` Pali Rohár
2013-11-18 21:51 ` Pali Rohár
2013-11-19 2:14 ` Herbert Xu
2013-11-19 2:14 ` Herbert Xu
2013-11-23 9:37 ` Pali Rohár
2013-11-23 9:37 ` Pali Rohár
2013-11-23 12:09 ` Sebastian Reichel
2013-09-20 13:25 ` [PATCH v2 3/3] RX-51: Add support for OMAP3 ROM Random Number Generator Pali Rohár
2013-09-20 13:25 ` Pali Rohár
2013-10-08 19:06 ` Tony Lindgren
2013-10-08 19:06 ` Tony Lindgren
2013-03-28 9:52 ` [PATCH] OMAP3 ROM Random Number Generator support Russell King - ARM Linux
2013-03-28 9:52 ` Russell King - ARM Linux
2013-03-28 17:24 ` Pali Rohár
2013-03-28 17:24 ` Pali Rohár
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=20131008190408.GM8313@atomide.com \
--to=tony@atomide.com \
--cc=aaro.koskinen@iki.fi \
--cc=herbert@gondor.apana.org.au \
--cc=joe@perches.com \
--cc=juha.yrjola@solidboot.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-omap@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--cc=mpm@selenic.com \
--cc=pali.rohar@gmail.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: link
Be 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.